2012-02-01 117 views
1

我想篩選多個列上的列表。我知道我可以循環通過列表集合並過濾記錄,有沒有更好的方法?按多個條件篩選列表

我的第一個標準是colA != 「X」並且如果colA == 「Y」只檢查此類型的colB值。

我必須讓對可口可樂的所有值,除了「X」和if ColA == 「Y」 && colB == 「T」(我檢查COLB值僅if ColA == 「Y」)我不能寫這個。

基本上,如果可樂==「X」則不允許如果可樂==「Y」,然後檢查取決於值COLB值和過濾器。允許所有可樂值的其餘部分。

Accounts = Accounts.Where(acc => acc.ColA != 「X」 || ??).ToArray(); 

回答

2

像這樣的東西應該工作如果我正確理解你的問題。

Accounts.Where(acc => !(acc.ColA == "X" || (acc.ColA == "Y" && acc.ColB == "T"))).ToArray(); 

不過,我認爲這是更具可讀性:

Accounts 
    .Where(acc => !(acc.ColA == "X")) 
    .Where(acc => !(acc.ColA == "Y" && acc.ColB == "T")) 
    .ToArray(); 
+0

32bitkid - 一流的,真棒的答案!有效 …。非常感謝你 – user228777 2012-02-01 12:46:18

1
string columnBValue = "T"; 
Accounts = Accounts.Where(acc => 
         acc.ColA != 「X」 
         && 
         (x.ColA != "Y" || 
         (x.ColA == "Y" && x.ColB == columnBValue))) 
        .ToArray(); 
+0

剛剛更新,檢查出來 – sll 2012-02-01 12:13:32

+0

NO正如我在上面的帖子說,我已經嘗試過,這並不工作,所以只允許其中x .ColA ==「Y」&& x.ColB == columnBValue所有其他ColA值越來越無視我不想要的值。我想要除X之外的所有colA值,如果值爲Y,則檢查其他條件,否則不檢查只選擇該值。 – user228777 2012-02-01 12:15:43

+0

對,只檢查最後一個版本 – sll 2012-02-01 12:16:00