比较linq中的日期

时间:2014-10-08 14:16:59

标签: c# html forms linq linq-to-entities

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

db中的日期是日期时间并记录时间。

如果用户输入搜索字符串" 1 / 30/2014",他们希望返回该日期任何时间发生的条目。但是,任何在上午12点之后有时间的东西都不会被退回。

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

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

3 个答案:

答案 0 :(得分:11)

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

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

通过这种方式,您可以包含这一天,因为DateTime都是午夜。

更新如果您不支持使用LINQ to Entities DateTime.Date,则可以使用此解决方案:Using DateTime in LINQ to Entities

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

答案 1 :(得分:0)

你说

  

日期大于或等于给定日期

但是在你的代码中你写了

s.date_Closed <= d

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

答案 2 :(得分:0)

对于此示例,您不需要任何其他dll 。您可以实现其他函数,返回bool,f.e:

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));