比较Linq

时间:2016-10-20 21:05:48

标签: c# asp.net .net sql-server linq

在表格中有一组带有创建日期字段的记录。如何选择在一周中的某一天创建的所有记录。例如所有在星期一创建的记录,可能是本周一,上周一或周一。

这是我到目前为止所写的:

from ob in obList
where SqlFunctions.DateDiff("days", today, ob.StartDate) % 7 == 0
select ob.CustomerOnboardingId

但是我得到了一个错误:

  

{“此函数只能从LINQ到实体调用。”}

更新1:

obList是内存中的一个集合。 今天是变量,它持有DateTime.Today;

2 个答案:

答案 0 :(得分:2)

您不需要调用该函数来获取天数的差异,正如例外所述,它只能在Linq to Entities中使用。在Linq to Objects中,您可以执行以下操作:

from ob in obList
where (today - ob.StartDate).TotalDays  % 7 == 0
select ob.CustomerOnboardingId

答案 1 :(得分:1)

由于错误指定您正在尝试执行Linq to Entities in-memory的方法,但该方法无法完成。当linq查询,在linq2Sql或EF的上下文中执行时,它被转换为sql,这就是当你使用的函数之类的函数得到它们的含义时 - 它们实现了如何在sql中执行它。在内存中的集合中,它们毫无意义。

(就像你将尝试在linq-to-entities查询中执行代码中定义的方法,并且会得到linq-to-entities不支持 < / p>

您可以使用(day1 - day2) % 7的{​​{1}}属性,而不是计算DayOfWeek

DateTime