LINQ to Entities不支持"日期".仅支持初始值设定项,实体成员和实体导航属性

mik*_*f22 47 c# linq linq-to-entities entity-framework

我正在尝试执行以下代码并收到错误

public List<Log> GetLoggingData(DateTime LogDate, string title)
{
     var context = new LoggingEntities();
     var query = from t in context.Logs

           where t.Title == title 
           && t.Timestamp == LogDate

           select t;
     return query.ToList();
}
Run Code Online (Sandbox Code Playgroud)

我收到的错误是"LINQ to Entities不支持指定的类型成员'Date'.仅支持初始值设定项,实体成员和实体导航属性." 我已尝试过将各种符号转换为字符串的各种尝试,只比较日期部分,但似乎无法获得正确的组合.任何帮助是极大的赞赏.

Hen*_*bæk 87

如果您使用的是EF 6.0+,则可以使用DbFunctions.TruncateTime(DateTime?):

var query =
    from t in context.Logs
    where t.Title == title 
    && DbFunctions.TruncateTime(t.Timestamp) == LogDate.Date
    select t;
Run Code Online (Sandbox Code Playgroud)

注意:对于DbFunctions不可用的早期版本的EF ,EntityFunctions.TruncateTime(DateTime?)可以使用.

  • BTW - 该功能现已过时,已移至另一个组件.请改用"DbFunctions.TruncateTime(t.Timestamp)". (19认同)
  • 你先生+1.我无法在我的案例中使用接受的答案,因为我做了一个"大于"的比较,在这个比较中你无法分别比较日,月和年. (3认同)
  • 不知道功能.太棒了. (2认同)

mik*_*f22 23

不是最好的解决方案,但它确实有效.由于各种原因,我此时必须使用.net 3.5并且修改数据库会很困难.无论如何,这是一个有效的解决方案:

            var query = from t in context.Logs
                      where t.Title == title 
                      && t.Timestamp.Day == LogDate.Day
                      && t.Timestamp.Month == LogDate.Month
                      && t.Timestamp.Year == LogDate.Year
                      select t;
Run Code Online (Sandbox Code Playgroud)

不是最优雅的解决方案,但它是有效的.