每个第 N 个日期的 IQueryable Lambda 表达式
IQueryable Lambda Expression for every Nth date
我有一个包含一系列日期的日历 table,我正在尝试编写一个查询,每隔 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);
是否可以通过其他方式编写以使其工作?
您不能在 EF 中使用 lambda 表达式执行此操作,但您可以使用 raw queries 并根据需要使用您已经编写的 sql 查询(或使用存储过程)。
像这样:
var q = dbcontext.Calendar
.Where(c => EF.Functions.DateDiffDay(startdate, c._date) % 3 == 0);
我有一个包含一系列日期的日历 table,我正在尝试编写一个查询,每隔 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);
是否可以通过其他方式编写以使其工作?
您不能在 EF 中使用 lambda 表达式执行此操作,但您可以使用 raw queries 并根据需要使用您已经编写的 sql 查询(或使用存储过程)。
像这样:
var q = dbcontext.Calendar
.Where(c => EF.Functions.DateDiffDay(startdate, c._date) % 3 == 0);