2014-10-08 152 views
2

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

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

如果用户输入搜索字符串“1/30/2014”,他们希望返回该日期随时发生的条目。然而,12点以后有时间的东西不会被退回。

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

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

回答

7

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

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

在这条路上你会包括这一天,因为这两个DateTime s为午夜。

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

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

我不知道,如果op是使用LINQ到实体(他们提到一个分贝),但如果他们是'日期'将不起作用。 – juharr 2014-10-08 14:21:28

+0

多数民众赞成右 - 日期不可用 – tintyethan 2014-10-08 14:22:19

+0

@tintyethan:我编辑它。 – 2014-10-08 14:25:57

0

你说

与日期大于或等于给定日期

但是在你的代码中你写了

s.date_Closed <= d 

我认为你必须>=改变<=获得日期大于或等于d,现在你开始日期小于或等于d。

+0

好抓 - 我更新了示例代码 – tintyethan 2014-10-08 16:22:11

0

对于本示例,您不需要任何其他dll。您可以实现其他功能,它会返回bool,FE:

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