【问题标题】:How to use mod function for linq to ms access?如何使用 mod 功能进行 linq to ms 访问?
【发布时间】:2021-01-13 03:14:34
【问题描述】:

我正在尝试使用 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 访问权限?

【问题讨论】:

  • 您使用哪个客户端连接到 MS-ACCESS? - 这可能是一个错误:-|
  • @Stefan JetEntityFrameWork

标签: c# linq ms-access dayofweek


【解决方案1】:

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

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

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

【讨论】:

  • 这就是如此简单和“优雅”。这是一种黑客攻击,但我现在不必与这个错误作斗争。谢谢!
【解决方案2】:

我不明白你为什么说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 Query 语法,答案可能是:

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

【讨论】:

  • 这如何反映:After looking around I realized % equivalent of ms access is mod?
  • 我看不出这与我的代码有什么不同。
  • 如果 x.Date 为空,您将遇到错误,因为在 && 测试中首先调用 DBfunctions,在我的代码中,如果 x.Date 为空,则测试为假,第二部分不是测试
  • 这仍然不能回答我正在寻找的问题。我提到了linq to query,而不仅仅是linq
  • 这是 Access EF Core 提供程序的限制,而不是 Linq 查询本身。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多