如何在LINQ中使用Date函数实体?

时间:2013-09-17 19:09:33

标签: c# linq entity-framework linq-to-entities

我的方法应该返回一个用户注释列表,所以我这样做:

  var saturday = DayOfWeek.Saturday;
  var query = from note in userNotes
  where note.NoteDate > lastMonth && note.NoteDate.DayOfWeek != saturday
        select note;

但是我收到了这个错误:

  

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

有关如何使用linq比较星期几的任何想法?

2 个答案:

答案 0 :(得分:16)

使用SqlFunctions.DatePart静态方法。它将转换为DATEPART TSQL函数调用。

var saturday = (int)DayOfWeek.Saturday;
var query = from note in userNotes
            where note.NoteDate > lastMonth && SqlFunctions.DatePart("dw", note.NoteDate) != saturday
            select note;

答案 1 :(得分:3)

由于我使用的是Oracle,我无法使用SqlFunctions课程。最终我找到了解决此问题的简单方法:

  

通常当您尝试使用LINQ没有的属性时   本机支持,您需要创建一个具体的实现   在应用LINQ约束之前的集合。

     

您可以使用之前的ToList()或AsEnumerable()方法执行此操作   你的Where子句如下所示:

 //Using the ToList() method
IEnumerable<CalendarDate> LessonDates = db.CalendarDates.ToList().Where(cd => cd.Date.DayOfWeek == DayOfWeek.Friday);

//Using the AsEnumerable() method
IEnumerable<CalendarDate> LessonDates = db.CalendarDates.AsEnumerable().Where(cd => cd.Date.DayOfWeek == DayOfWeek.Friday);

消息来源:link