2011-03-09 50 views
2

|(管道)運算符在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值。

上述條件不起作用,它採用默認值。

我可以使用什麼條件來獲得正確的值?

+0

'|'是不是「管」 – 2011-03-09 07:19:32

回答

1

您的意思是使用||代替嗎?他們看起來像「或」限制給我...也,混合&&||的時候,是非常明確用括號......即是(x && y) || z,或x && (y || z)

+0

他們*是*「或」約束上,在'|'經營者給的與'||'運算符相同的結果。 – Guffa 2011-03-09 07:40:47

+0

@Guffa在這種情況下,是的,但在一般情況下不能保證 - 例如'true | ThrowsAnException()'給'true ||提供了一個不同的結果ThrowsAnException()'。我的觀點很簡單:看起來OP應該在這裏使用'||',作爲表達他們意圖的最習慣的方式。 – 2011-03-09 07:45:22

1

我認爲你需要更換|與||並且您可能希望將這四個條件放在括號後面的運算符後面。就像這樣:

&& (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) 
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)