linq - EF如何按日期过滤数据

标签 linq entity-framework entity-framework-4

我使用 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/

相关文章:

c# - LINQ to Nhibernate 重复连接

c# - 使用 Entity Framework 6.1.1 和模拟进行异步/等待

sql-server - Entity Framework 中的存储过程与 ADO.NET

entity-framework - 在 Entity Framework 中禁用外键暴露?

c# - 将数据从 2 个表映射到 1 个实体 - Entity Framework 4

c# - Linq - 分组然后比较每个组内的元素

c# - 扩展方法如何在后台工作?

c# - 使用 LINQ 查询巨大的 CSV 和 Excel

entity-framework - 使用 MSBuild 构建 Entity Framework 模型而不使用项目文件?

c# - 无法加载文件或程序集 'EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'