LINQ to Entities 不支持指定的类型成员“日期”。 DbFunctions.TruncateTime()

Posted

技术标签:

【中文标题】LINQ to Entities 不支持指定的类型成员“日期”。 DbFunctions.TruncateTime()【英文标题】:The specified type member 'Date' is not supported in LINQ to Entities. DbFunctions.TruncateTime() 【发布时间】:2020-05-30 08:37:56 【问题描述】:
Question question = 
         db.Questions
           .Where(q => DbFunctions.TruncateTime(q.Day.DayDate) == DbFunctions.TruncateTime(DateTime.Now.Date))
           .Where(q => q.Order == id)
           .FirstOrDefault();

当我尝试运行上述语句时,出现以下错误:

LINQ to Entities 不支持指定的类型成员“日期”

我认为DbFunctions.TruncateTime() 方法可以解决这个问题,正如我看到的许多帖子中所建议的那样,但是我仍然得到错误。我也尝试将该方法应用于数据库值,但仍然出现相同的错误。

Question question = 
         db.Questions
           .Where(q => DbFunctions.TruncateTime(q.Day.DayDate) == DateTime.Now.Date)
           .Where(q => q.Order == id) 
           .FirstOrDefault();

【问题讨论】:

尝试只使用:DateTime.Now 而不是 DateTime.Now.Date 嘿@Sajid 试过了,同样的错误 q.Day.DayDateq.Day的类型是什么? @SelimYıldız 日期时间 @SelimYıldız 我最初尝试过,这就是问题所在。我都试过了: DbFunctions.TruncateTime(q.Day.DayDate) == DateTime.Now.Date 和 DbFunctions.TruncateTime(q.Day.DayDate) == DateTime.Now 【参考方案1】:

您需要在 LINQ 之前将 DateTime 拉入变量:

var dateOfNow = DateTime.Now.Date;

Question question = 
         db.Questions
           .Where(q => DbFunctions.TruncateTime(q.Day.DayDate) == dateOfNow)
           .Where(q => q.Order == id) 
           .FirstOrDefault();

【讨论】:

我认为问题出在数据库中的日期......无论如何现在都在工作。谢谢

以上是关于LINQ to Entities 不支持指定的类型成员“日期”。 DbFunctions.TruncateTime()的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 ApplicationUserManager 中的“LINQ to Entities 中不支持指定的类型成员‘UserId’”

在LINQ to Entities中不支持指定的类型成员'x'。只支持初始化器实体成员和实体导航属性。

LINQ to Entities 不支持 LINQ 表达式节点类型“Invoke”

“LINQ to Entities 不支持 LINQ 表达式节点类型 'Invoke'” - 难倒!

LINQ to Entities 不支持 LINQ 表达式节点类型“Invoke”

LINQ to Entities 仅支持使用 IEntity 接口强制转换 EDM 基元或枚举类型