2012-02-01 9 views
1

複数の列のリストをフィルタリングしようとしています。リストコレクションをループしてレコードをフィルタリングできることはわかっていますが、これ以上の方法はありますか?複数の条件のリストをフィルタリングする

私の最初の基準はcolA != “X”であり、colA == “Y”の場合は、このタイプのcolB値のみをチェックします。私は、「X」とif ColA == “Y” && colB == “T”除くで、colA上のすべての値が(私はこれを書くことができないのです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

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

、私はそれだけでここで、xができますので、私はすでに試した上記の記事で言ったように、これは動作しませんNO – sll

+0

をそれをチェックアウト.ColA == "Y" && x.ColB == columnBValue他のすべてのColA値は無視されてしまいます。 Xを除くすべてのcolA値が必要な場合、値がYの場合は追加の条件をチェックしてください。その値を選択してチェックしないでください – user228777

+0

いいえ、最後のバージョンを確認してください。 – sll

関連する問題