2013-10-17 139 views
-5

我有這句話的LINQ to filtring一個DataTable:爲什麼我的LINQ不能在多個條件下工作?

string V = @"V"; 
var DTError = from DTError1 in DT.AsEnumerable() 
       .Where(r => ((r.Field<string>("TIPO_DE_DOCUMENTO") != V))) 
       select DTError1; 

這個LINQ工程;但是當我在添加另一個條件,其中LINQ不工作(見下文)

string V = @"V"; 
string M = @"M"; 

var DTError = from DTError1 in DT.AsEnumerable() 
       .Where(r => ((r.Field<string>("TIPO_DE_DOCUMENTO") != V)) 
          || (r.Field<string>("TIPO_DE_DOCUMENTO") != M)) 
       select DTError1; 

這是爲什麼happend?

我知道這是一個很不錯的問題,但是documentacion不能幫助我。

謝謝。

+0

什麼是您的數據來源?你確定有'TIPO_DOC'的條目既不是V也不是E'...至於TIPO_DOC;這是一個什麼樣的字段名稱? –

+1

總是展開「不起作用」。 –

+1

您的查詢主要是查找TIPO_DE_DOCUMENTO不等於V或不等於M的記錄。如果它= M,那麼它!= V,反之亦然,因此您的位置對於所有記錄均爲真。 –

回答

5

我想你想要一個AND運算符(& &)而不是OR(||)。

+0

非常感謝,我會標記這個問題。 –

1

我認爲你有你的括號中的問題,你希望它們都成爲第一個內:

.Where(r => r.Field<string>("TIPO_DOC") != V) 
     || (r.Field<string>("TIPO_DOC") != E)) 
1

嘗試&&代替||

string V = @"V"; 
    string E = @"E"; 
    var DTError = from DTError1 in DT.AsEnumerable() 
        .Where(r => (r.Field<string>("TIPO_DOC") != V) &&  
           (r.Field<string>("TIPO_DOC") != E)) 
        select DTError1; 

OR

string V = @"V"; 
     string E = @"E"; 
     var DTError = from DTError1 in DT.AsEnumerable() 
         .Where(r => (r.Field<string>("TIPO_DOC") != V)) 
         .Where(r => (r.Field<string>("TIPO_DOC") != E)) 
         select DTError1; 
1

您希望在這種情況下確實使用& &而不是||。

嘗試在你試圖用你的where子句來查詢通俗易懂的語言表達寺...

如果我有車的集合,我想選擇滿足以下條件的所有汽車:

車不是紅色或車不是藍色

我會得到所有的車,因爲任何車不滿足第一部分(不是紅色)必須滿足第二部分(畢竟只有紅色汽車不滿足第一部分的規定,紅色車輛不是藍色的)。

我已經看到了相反的情況下就這麼多的變化,試圖讓所有的藍色轎車和全紅車,在這種情況下永世經常使用「其中的color = red & &顏色==藍色」的時候。 由於類似的原因,這不會產生預期的結果。

相關問題