日期:2014-05-17  浏览次数:21657 次

LIST where或select如何动态查找多个条件
某功能需要查找出一个LIST中不包含某些字符串,但是这个字条串是按用户不用的。如何做成动态区分它。
相关代码:  
string[] titleContains = "新品,折扣".Split(',');//此条件记录在数据库,条件不定
   List<Item> it = Items.Where(x => x.Title.Contains("新品") == false && x.Title.Contains("折扣") == false).ToList();  

有时候titleContains ="已下架,无库存"等,所以需要动态地区分,如何做那个WHERE(或SELECT)条件的动态形式。谢谢啦。

------解决方案--------------------
Where在Linq to Objects可以写成方法体:
List<Item> it = Items.Where(x => {
    if (titleContains == "已下架,无库存")
    {
        ...
    }
    else
    {
        return !x.Title.Contains("新品") && !x.Title.Contains("折扣");
    }
}).ToList();  
------解决方案--------------------
引用:
抱歉,可能是我的问题说的不好,上面的高手都会错意了。
string[] titleContains = "AAA,BBB,CCC,DDD,EEE".Split(',')//这个地方是动态的!!!!!!!!!!!可能是别的词,需要的是查找出LIST中不包含AAA且不包含BBB不包含CCC不包含DDD不包含EEE不包含AAA这些词的产品,


如果是全不包含,那么Any就要换成All了:

string[] titleContains = "新品,折扣".Split(','); 
   
List<Item> it = Items.Where(x =>titleContains.All(s=>!x.Title.Contains(s))).ToList();