实体框架代码优先的日期比较帮助

时间:2012-12-04 13:28:39

标签: c# .net entity-framework

    using (var attendanceContext = new AttendanceAppContext())
    {
        var compareLogin = attendanceContext.Attendances.FirstOrDefault(u =>
        u.LoginDate == DateTime.Now.Date &&
        u.Employee.Username == user.Username);

代码继续,稍后使用compareLogin变量,但这里抛出一个异常,说: “LINQ to Entities不支持指定的类型成员'Date'。仅支持初始化程序,实体成员和实体导航属性。

请帮忙告诉我如何比较数据库中的日期。

2 个答案:

答案 0 :(得分:2)

您可以使用TruncateTime功能:

using (var attendanceContext = new AttendanceAppContext())
{
    var compareLogin = attendanceContext.Attendances.FirstOrDefault(u =>
    EntityFunctions.TruncateTime(u.LoginDate) == EntityFunctions.TruncateTime(DateTime.Now) &&
    u.Employee.Username == user.Username);
}

如果u.LoginDate是数据库中没有时间的日期,您可以尝试使用DateTime.Today代替DateTime.Now.Date。如果它不起作用,只需将其提取到某个变量(例如var today = DateTime.Today)并在LINQ表达式中使用它。

答案 1 :(得分:0)

将代码更改为:

 var compareLogin = (from a in attendanceContext.Attendances.FirstOrDefault
                     where a.LoginDate == DateTime.Now.Date && a.Employee.Username == user.Username
                     select a).ToList();