LINQ to Entities不支持“date”。 仅支持初始化器,实体成员和实体导航属性

我正试图执行下面的代码,并收到错误

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

我收到的错误是“指定的types成员”Date“在LINQ to Entities中不受支持,只支持初始值设定项,实体成员和实体导航属性。 我已经尝试过把每一个字母都转换成一个string,只是比较date部分,但似乎无法得到正确的结合。 任何帮助是极大的赞赏。

如果您使用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; 

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

不是最好的解决scheme,但它的工作原理。 由于各种原因,我必须在这时使用.net 3.5,修改数据库将是困难的。 无论如何,这是一个解决scheme:

  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; 

不是最优雅的解决scheme,但它是有效的。

EF6已经过时了EntityFunctions.TruncateTime(t.Timestamp) 。

在下面使用

DbFunctions.TruncateTime(t.Timestamp)

总是为xDateTimeStart和LogDate使用EntityFunctions.TruncateTime()。 如 :

 var query = from t in context.Logs where t.Title == title && EntityFunctions.TruncateTime(t.Timestamp) == EntityFunctions.TruncateTime(LogDate) select t; 

纠正我,如果我错了,但在mikemurf22的例子中,它将需要检查date组件的每个部分,并可能更多的服务器处理?

无论如何,我偶然发现这个问题,这是我的解决scheme。

假设您将只传入date组件,您可以find您传入的一天中的最后一分钟,然后使用where子句来定义范围。

 public List<Log> GetLoggingData(DateTime LogDate, string title) { DateTime enddate = new DateTime(LogDate.Year, LogDate.Month, LogDate.Day, 23, 59, 59) var query = from t in context.Logs where t.Timestamp >= date where t.Timestamp <= enddate select t; return query.ToList(); } 

你可以使用这个黑客:

 DateTime startDate = LogDate.Date; DateTime endDate = LogDate.Date.AddDays(1); var query = from t in context.Logs where t.Title == title && t.Timestamp >= startDate && t.Timestamp < endDate select t; 

将LongDate转换为.ToShortDateString ,然后你可以这样使用它:

 EntityFunctions.TruncateTime(t.Timestamp) == LogDate 

像迈克一样

尝试这个:

 var calDate = DateTime.Now.Date.AddDays(-90); var result = return (from r in xyz where DbFunctions.TruncateTime(r.savedDate) >= DbFunctions.TruncateTime(calDate)