2012-02-01 131 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