如何使用 mod 函数进行 linq to ms 访问?

How to use mod function for linq to ms access?

我正在尝试使用 linq 查询星期几,并且我有 ms 访问权限作为数据库。现在我使用以下代码使用 % (mod) 检查星期几,因为 linq to query 不支持 DayOfWeek.

planQuery = planQuery.Where(x => DbFunctions.DiffDays(firstSunday, x.Date) % 7 
                                                                == (int)DayOfWeek.Monday && x.Date != null);

但是当这段代码被翻译成 sql 时,问题就出现了:

SELECT *
FROM myTable
where (DateDiff("d", [Datum], 1) % 7) = 1

当我尝试 运行 由于 % 而引发语法错误。环顾四周后,我意识到 % 等效于 ms 访问是 mod

所以下面的代码 运行 没问题。但这不是翻译后的 SQL 的样子。

SELECT *
FROM myTable
where (DateDiff("d", [Datum], 1) mod 7) = 1

如何使用linq通过mod函数查询ms access?

我不明白你为什么说 DayOfWeek 不起作用,我写道:

planQuery = planQuery.Where(x => (x.Date != null) &&
                              (DbFunctions.DiffDays(firstSunday, x.Date) % 7 == (int)DayOfWeek.Monday));

因为如果 x.Date 为空,则不测试第二部分。在您的代码中,如果 x.Date 为空,您可能会出错,因为您在测试结束时对其进行了测试。

since linq to query doesn't support DayOfWeek

DayofWeek 是 C#,不是特殊的 linq 指令

所以如果你想使用 Linq 查询语法,答案可以是:

var result = from x in planQuery
             where (x.Date != null) &&
                  (DbFunctions.DiffDays(firstSunday, x.Date) % 7 == (int)DayOfWeek.Monday)
                     select x;

模数运算很容易通过一些除法、舍入和减法重现。

DbFunctions.DiffDays(firstSunday, x.Date) - (((int)DbFunctions.DiffDays(firstSunday, x.Date) / 7) * 7)

这应该等于 DbFunctions.DiffDays(firstSunday, x.Date) % 7,开销略高。