比较林中的日期

本文关键字:日期 林中 比较 | 更新日期: 2023-09-27 18:25:54

我想在数据库中查询日期大于或等于给定日期的项目。

数据库中的日期是一个日期时间并记录时间。

如果用户输入搜索字符串"1/30/2014",他们希望返回该日期任何时候出现的条目。然而,任何在上午12点之后的时间都不会返回。

我知道我可以简单地在搜索字符串中添加一天,但有更合适的方法吗?

if (form["closedend"] != "")
{
     DateTime d = DateTime.Parse(form["closedend"]);
     traces = traces.Where(s => s.date_Closed >= d);
}

比较林中的日期

您可以使用Date属性截断时间部分:

 traces = traces.Where(s => s.date_Closed.Date <= d.Date);

这样你就可以把这一天包括在内,因为两个DateTime都是午夜。

更新如果不支持使用LINQ to Entities DateTime.Date,则可以使用以下解决方案:在LINQ to Entitys 中使用DateTime

.Where(s => EntityFunctions.TruncateTime(s.date_Closed) <=  EntityFunctions.TruncateTime(d))

你说

日期大于或等于给定日期

但在你的代码中你写了

s.date_Closed <= d

我认为您必须将<=更改为>=才能获得大于或等于d的日期,现在您获得的日期小于或等于d。

对于本例,您不需要任何必要的其他dll。您可以实现其他功能,返回bool,例如:

public bool MyFunction(DateTime s)
{
   DateTime d = DateTime.Parse(Your constructor);
   return (s.date_Closed >= d);
}
var query = from obj in traces
            where MyFunction(obj.date_Closed.Date)
            select obj;

或:

var query = traces.Where(p => MyFunction(p.data_Closed.Date));

您可以使用DbFunctions.TruncateTime(StartDateTime)从datetime中删除时间。

    if (form["closedend"] != "")
    {
         DateTime d = DateTime.Parse(form["closedend"]);
         traces = traces.Where(s => DbFunctions.TruncateTime(s.date_Closed) >= DbFunctions.TruncateTime(d));
    }