“LINQ不支持指定的类型成员’Date’”

_dbEntities.EmployeeAttendances.Where(x => x.DailyDate.Date.Equals(DateTime.Now.Date)).ToList(); 

“LINQ to Entities不支持指定的类型成员’Date’。仅支持初始值设定项,实体成员和实体导航属性。”

如何根据linq查询中的当前日期获取员工数据?

EntityFramework无法将DateTime.Date转换为SQL。 因此,它无法生成预期的SQL。 如果您只想获取Date部分,则可以使用EntityFunctions.TruncateTime()DbFunctions.TruncateTime() (基于EF版本)方法,而不是这样:

  _dbEntities.EmployeeAttendances .Where(x => EntityFunctions.TruncateTime(x.DailyDate) == DateTime.Now.Date) .ToList(); 

附加信息:

EntityFunctions方法称为规范函数 。 这些是一组function,所有entity framework提供程序都支持这些function。 这些规范函数将转换为提供程序的相应数据源function。 规范函数是访问核心语言之外的function的首选方法,因为它们使查询可移植。

您可以在此处找到所有规范函数以及所有日期和时间规范函数。

更新:

EntityFunctions起, EntityFunctions已被弃用于System.Data.Entity.DbFunctions

不要在EF 6中使用EntityFunction .TruncateTime在DbFunctions类中:

 DbFunctions.TruncateTime(x.DailyDate) 

如果DailyDate属性已经只是一个日期而不是日期和时间,那么最简单的方法是使用:

 // Outside the query so it becomes a constant, effectively var today = DateTime.Today; var employees = _dbEntities.EmployeeAttendances .Where(x => x.DailyDate == today) .ToList(); 

如果确实有时间(使上述失败),您可以随时使用:

 // Outside the query so it becomes a constant, effectively var today = DateTime.Today; var tomorrow = today.AddDays(1); var employees = _dbEntities.EmployeeAttendances .Where(x => x.DailyDate >= today && x.DailyDate < tomorrow) .ToList(); 

...或者使用TruncateTime作为Farhad的回答建议。 我仍然建议首先评估DateTime.Today

 var today = DateTime.Today; var employees = _dbEntities.EmployeeAttendances .Where(x => EntityFunctions.TruncateTime(x.DailyDate) == today) .ToList(); 

请注意, Today (如DateTime.Now )使用系统默认时区。 你应该仔细考虑这是否是你想要的。

以防它有助于某人……在EF 6中,EntityFunctions已经过时,请改用DbFunctions类。 您可能希望包含命名空间System.Data.Entity;

例如:

 _dbEntities.EmployeeAttendances.Where(x => DbFunctions.TruncateTime(x.DailyDate) == DateTime.Now.Date).ToList();