6

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

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

但我得到这个错误:

LINQ to Entities 不支持指定的类型成员“日期”。只有初始化器、实体成员和实体导航属性。

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

4

2 回答 2

17

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

var saturday = (int)DayOfWeek.Saturday;
var query = from note in userNotes
            where note.NoteDate > lastMonth && SqlFunctions.DatePart("dw", note.NoteDate) != saturday
            select note;
于 2013-09-17T19:12:50.240 回答
3

当我使用 Oracle 时,我无法使用SqlFunctions类。最终我找到了解决这个问题的简单方法:

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

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

 //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);

来源:链接

于 2014-10-17T13:44:24.667 回答