| linq的操作员操作?

时间:2011-03-09 06:45:48

标签: linq

linq中的

|(管道)运算符?我想知道运算符(|)的运算。我想检查不同表中的多个列。在我的场景中,只有单个表包含该特定列的值。

我的代码:

&& swr.Date_Of_Event.Date < DateTime.Today.Date | 
   spr.Date_Of_Event.Date < DateTime.Today.Date | 
   scr.Date_Of_Event.Date < DateTime.Today.Date | 
   smr.Date_Of_Event.Date < DateTime.Today.Date

在这种情况下,只有一个表包含日期值,其他表将包含其所尊重列中的dault值。

上述条件不起作用,取默认值。

我可以用什么条件来获得正确的价值?

3 个答案:

答案 0 :(得分:2)

|运算符提供与||运算符相同的结果,但它不会使结果短路。这意味着即使可以通过仅评估第一个操作数来确定结果,也始终会评估两个操作数。

我认为主要问题是&&运算符的优先级高于|运算符(或||运算符),因此需要使用括号:

&& (swr.Date_Of_Event.Date < DateTime.Today.Date | 
    spr.Date_Of_Event.Date < DateTime.Today.Date | 
    scr.Date_Of_Event.Date < DateTime.Today.Date | 
    smr.Date_Of_Event.Date < DateTime.Today.Date)

您可以使用操作符的短路版本,因为读取Date属性没有任何副作用:

&& (swr.Date_Of_Event.Date < DateTime.Today.Date ||
    spr.Date_Of_Event.Date < DateTime.Today.Date ||
    scr.Date_Of_Event.Date < DateTime.Today.Date ||
    smr.Date_Of_Event.Date < DateTime.Today.Date)

答案 1 :(得分:1)

您的意思是使用||吗?它们看起来像是对我的“或”约束......同样,在混合&&||时,用括号将非常清除......即是{{1} },或(x && y) || z

答案 2 :(得分:1)

我认为你需要更换|与||你可能想把这四个条件放在&amp;&amp;&amp;运营商。像这样:

&& (swr.Date_Of_Event.Date < DateTime.Today.Date || 
    spr.Date_Of_Event.Date < DateTime.Today.Date || 
    scr.Date_Of_Event.Date < DateTime.Today.Date || 
    smr.Date_Of_Event.Date < DateTime.Today.Date)