|(管道)运算符?我想知道运算符(|)的运算。我想检查不同表中的多个列。在我的场景中,只有单个表包含该特定列的值。
我的代码:
&& 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值。
上述条件不起作用,取默认值。
我可以用什么条件来获得正确的价值?
答案 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)