6

我使用 EF 4,我的DateTimeStart实体中有一个属性,日期格式为这种格式16/08/2012 08:14:40,我想用 EF 查询并找到所有实体within the date 16/08/2012 only。使用下面的代码我收到此错误

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 });
4

3 回答 3

6
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,详细说明一下:

实体框架无法在数据库端转换 DateTime 对象上的Date属性。

您的选择是:

(1)(如上)重新考虑您的查询并尝试一种不需要在数据库端为表中的每一行调用函数的解决方案......这对查询性能也有好处

(2) 或者如果这不可能,您可以使用EntityFunctions类,该类公开了可由EF 转换为底层数据源的适当本机函数的方法(例如TruncateTime) 。

例如

return db.EventCustoms
    .Where(x => EntityFunctions.TruncateTime(x.DataTimeStart) <= dateNow)
于 2012-08-16T09:08:01.090 回答
3
DateTime dateTimeNow = DateTime.UtcNow;
        DateTime dateNow = dateTimeNow.Date;
        return db.EventCustoms.Where(
             x => EntityFunctions.DiffDays(x.DataTimeStart, dateNow) >= 0)
            .Select(y => new { y.EventId, y.EventTitle, y.DataTimeStart });
于 2012-08-16T09:02:26.097 回答
1

在 EF 6 中:

using System.Data.Entity;
...
db.EventCustoms.Where(x => 
 DbFunctions.TruncateTime(x.DataTimeStart) <= DbFunctions.TruncateTime(dateNow))
于 2014-12-02T09:00:18.273 回答