如何使用linq to ms access的mod函数?

问题描述

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

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

但是当将此代码转换sql时,会出现问题,如下所示:

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

当我尝试运行它时,由于%而反过来会引发语法错误。环顾四周后,我意识到等效于ms访问的百分比是mod

因此以下代码运行良好。但这不是经过翻译的sql的样子。

SELECT *
FROM myTable
where (DateDiff("d",1) mod 7) = 1
@H_502_7@

如何使用linq使用mod函数查询ms访问权限?

解决方法

模量是一种易于进行除法,四舍五入和减法运算的操作。

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

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

,

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

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="DIV_Container">
    <div class='div_sub_dyn' id="DIV_1">        
        <img src="https://i.stack.imgur.com/OVOg3.jpg" width=150>
    </div>
    <div class='div_sub_dyn' id="DIV_2">
        <img src="https://i.stack.imgur.com/XZ4V5.jpg" width=150>
    </div>
    <div class='div_sub_dyn' id="DIV_3">
        <img src="https://i.stack.imgur.com/aH5zB.jpg" width=300>
    </div>
</div>

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

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

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

因此,如果要使用Linq Query语法,答案可能是:

since linq to query doesn't support DayOfWeek