比较Linq查询中的2个日期

时间:2015-03-29 16:04:01

标签: c# linq datetime

我正在尝试比较LINQ查询中2个DateTime值的2个日期(仅日期),这样做:

var appointmentsWithPatch = (from ap in context.DBAppointment where dtStart.Date ==  ap.StartDate.Value.Date select ap).ToList();

知道dtStart包含27/03/2015并且我在DBAppointment表中有一条记录,其日期为StartDate,它应该返回一个元素。但是,它不起作用,我得到null。

对这里发生的事情有所了解吗?

2 个答案:

答案 0 :(得分:2)

尝试截断dtStart.Date的时间:

 var appointmentsWithPatch = 
          (from ap in context.DBAppointment 
             where EntityFunctions.TruncateTime(dtStart.Date) == ap.StartDate.Value.Date 
             select ap)
         .ToList();

如果您使用的是EF6,请将EntityFunctions更改为DbFunctions

其他信息:

EntityFunctions方法称为 规范函数 。这些是一组功能,所有实体框架提供程序都支持这些功能。这些规范函数将转换为提供程序的相应数据源功能。规范函数是访问核心语言之外的功能的首选方法,因为它们可以使查询保持可移植性。

您可以找到所有规范函数here以及所有日期和时间规范函数here

不要忘记添加对System.Data.ObjectsSystem.Data.Entity的引用。

答案 1 :(得分:0)

您需要使用Linq to Entities。

var appointmentsWithPatch = (from ap in context.DBAppointment where DbFunctions.DiffDays(dtStart, ap.StartDate) == 0 select ap).ToList();

法哈德的回答也是有效的;关键是实体框架需要将您的Linq Expression转换为相应的SQL,而DbFunctions提供了使其能够执行此操作的工具。