我正在尝试比较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。
对这里发生的事情有所了解吗?
答案 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.Objects
和System.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
提供了使其能够执行此操作的工具。