2012-11-07 45 views
3
IEnumerable<WireUsrTgInfo> lstWireData = 
    (from var in lstWireUsrTgInfo 
    where var.bWireData == true && var.bWireData == false --> This is not working 
    select var).AsEnumerable<WireUsrTgInfo>(); 

如何做到這一點...如何在C#linq中創建AND運算符?

+5

不要使用'var'它是令人困惑和關鍵字。 –

+0

就是這樣:)'var lstWireData = Enumerable.Empty ();' – 2kay

+0

最後不需要包含括號和'AsEnumerable ()'。結果將是相同的。 –

回答

3

bWireData不能同時爲真和假。你的邏輯有一個缺陷。

5

根據碼提供

var.bWireData == true && var.bWireData == false 

它不能工作,因爲相同的變量不能當代等於兩個oposite值。

,如果您需要參數化這一點,你可以不喜歡它:

bool expectedValue = true; //OR False 
IEnumerable<WireUsrTgInfo> lstWireData = (from var in lstWireUsrTgInfo 
      where var.bWireData == expectedValue 
      select var).AsEnumerable<WireUsrTgInfo>(); 

編輯

並在查詢不使用var,它的上下文(由Monkieboy爲mantioned)C#關鍵詞。要清楚:你可以使用,但你必須避免這樣做,因爲它會造成混淆。

+0

'var'不是保留的,而是一個'contextual'關鍵字;你是正確的,它不應該使用,但爲混淆問題。 http://msdn.microsoft.com/en-us/library/x53a06bb。aspx –

+1

@Monkieboy:確定你可以**使用它,但你**沒有**那樣做,因爲混淆問題。 – Tigran

+1

是的,進一步澄清,但稱它爲'保留'關鍵詞在技術上是錯誤的。這是一個「上下文」關鍵字。將它用作變量名有點令人沮喪,因爲如果在編譯期間突出顯示(作爲警告),就像真正的「保留」關鍵字一樣,它會使生活更輕鬆。 –

0

這將永遠不會工作:WHERE bWireData == true && bWireData == false是不合邏輯的因爲bWireData不能同時爲真和假。

var是一個關鍵字,爲避免混淆,不應將其用作變量的名稱。

+1

Var實際上可以用在那裏,我以爲是同樣的事情。嘗試一下。 – Erix

+0

var沒有保留,它會工作,但它很混亂。 –

+0

不知道,在其他語言中,你不能那樣做嗎? –

2

正如其他答案所述,您的過濾條件是錯誤的。但還有一些我想補充的內容:

不要比較布爾數據與truefalse。布爾數據實際上是一個問題的答案是否是true

var query = from info in lstWireUsrTgInfo 
      where info.bWireData // selects data which is true 
      select info; 

另外var是關鍵字;

也不要在變量名稱中使用前綴(考慮更好的命名 - HasWireData,wireUserTagInfos)。

0

& &是正確的操作符。然而,正如其他海報所指出的那樣,您的問題就像是說「如果奧巴馬是總統,奧巴馬不是總統,讓我開心」。基本上你已經建立了一個矛盾,它總會被評估爲假,因此不會返回任何結果。順便說一句,你可能有興趣得知& &是一個有條件的,也就是說,如果第一項是真的,那麼第二項才被評估,因此如果結果不可避免地是錯誤的,那麼節省第二項的處理。