簡體   English   中英

如何使用 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 訪問權限?

模數是一種可以通過一些除法、舍入和減法輕松重現的運算。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM