每 N 个日期的 IQueryable Lambda 表达式
Posted
技术标签:
【中文标题】每 N 个日期的 IQueryable Lambda 表达式【英文标题】:IQueryable Lambda Expression for every Nth date 【发布时间】:2021-09-17 04:48:47 【问题描述】:我有一个包含一系列日期的日历表,我正在尝试编写一个查询,每 N 个日期给我一次。我可以在 SQL 中毫无困难地做到这一点,但是当用 IQueryable
和 Where
条件编写它时,我似乎无法让它工作。
例如,我可以在 SQL 中执行类似的操作来获取每三个日期:
Select _date
from Calendar
where datediff(day, startdate, _date) % 3 = 0
但是一个类似的IQueryable
lambda 表达式会抛出一个System.ArgumentException
(当查询被执行时)
var q = dbcontext.Calendar
.Where( c => (c._date - startdate).Days % 3 == 0);
有没有其他方法可以让它工作?
【问题讨论】:
【参考方案1】:像这样:
var q = dbcontext.Calendar
.Where(c => EF.Functions.DateDiffDay(startdate, c._date) % 3 == 0);
【讨论】:
谢谢!我应该说我使用的是 EF6,但你的回答帮助我找到了DbFunctions.DiffDays
【参考方案2】:
您无法在 EF 中使用 lambda 表达式,但您可以使用 raw queries 并根据需要使用您已经编写的 sql 查询(或使用存储过程)。
【讨论】:
以上是关于每 N 个日期的 IQueryable Lambda 表达式的主要内容,如果未能解决你的问题,请参考以下文章
IEnumerable 类型如何转换成IQueryable类型
asp.net mvc中使用linq to sql查询数据集(IQueryable类型) 怎么用foreach循环去数据集的数据?