Linq Date当天比较

时间:2012-06-14 06:18:27

标签: c# linq search datetime

我有这个问题:

var q = from p in DB.treatments
    where p.start >= start && p.end <= end
    select p;

在数据库中,结尾说06/14/2012 12:00 am.m.据说包括6月15日之前的6月14日。

所以如果我在06/14/2012 04:00 pm发送结束参数。它不会返回任何东西,只有它是06/15/2012但是我希望它整天搜索14,而不是15。

所以我想搜索14日的整天,并且当选择14时,日期时间将于06/14/2012中午12:00返回。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

您需要比较Datestart

end属性
 var q = from p in DB.treatments
         where p.start >= start.Date && p.end <= end.Date
         select p;

如果start.Date6/14/2012 4:00 PM,那么当您使用6/14/2012属性时,您只需在Date上进行比较。

答案 1 :(得分:0)

你需要与.Date进行比较。如果您要查询数据库,.Date函数将无法正常工作,因为它无法转换为SQL。

LINQ to Objects使用

var q = from p in DB.treatments
    where p.start >= start.Date && p.end <= end.Date
    select p;

用于LINQ to SQL或LINQ to ENTITIES使用

var startDate = start.Date;  
var endDate = end.Date;  
var q = from p in DB.treatments  
        where p.start >= start && p.end <= end  
        select p;  

更新:如果正在使用.NET 4.0+,您可以使用实体函数TruncateTime。类似的东西:

var q = from p in DB.treatments
    where EntityFunctions.TruncateTime(p.start) >= EntityFunctions.TruncateTime(start)      
        && EntityFunctions.TruncateTime(p.end) <= EntityFunctions.TruncateTime(end)
    select p;