[英]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 訪問權限?
模數是一種可以通過一些除法、舍入和減法輕松重現的運算。
DbFunctions.DiffDays(firstSunday, x.Date) - (((int)DbFunctions.DiffDays(firstSunday, x.Date) / 7) * 7)
這應該等於DbFunctions.DiffDays(firstSunday, x.Date) % 7
,但開銷略高。
我不明白你為什么說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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.