我使用 EF 4,我的实体中有一个属性 DateTimeStart
,其日期格式为 16/08/2012 08:14:40
,我想要查询使用 EF 并查找仅在 16/08/2012 日期内
的所有实体。使用下面的代码我收到此错误
The specified type member 'Date' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.
我的代码
DateTime dateTimeNow = DateTime.UtcNow;
DateTime dateNow = dateTimeNow.Date;
return db.EventCustoms.Where(x => x.DataTimeStart.Date <= dateNow)
.Select(y => new { y.EventId, y.EventTitle, y.DataTimeStart });
最佳答案
DateTime dateTimeNow = DateTime.UtcNow;
DateTime dateTomorrow = dateTimeNow.Date.AddDays(1);
return db.EventCustoms.Where(x => x.DataTimeStart < dateTomorrow)
.Select(y => new { y.EventId, y.EventTitle, y.DataTimeStart });
[编辑] @GibboK,详细说明一下:
Entity Framework 无法翻译 Date数据库端 DateTime 对象的属性。
您的选择是:
(1)(如上所述)重新考虑您的查询并尝试寻找一种不需要在数据库端为表中的每一行调用函数的解决方案......这也有利于查询性能
(2) 或者如果不可能,您可以使用 EntityFunctions类,它公开可以由 EF 转换为底层数据源的适当 native 函数的方法(例如 TruncateTime )。
例如
return db.EventCustoms
.Where(x => EntityFunctions.TruncateTime(x.DataTimeStart) <= dateNow)
关于linq - EF如何按日期过滤数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11983725/