LIST where或select如何动态查找多个条件

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

有时候titleContains ="已下架,无库存"等,所以需要动态地区分,如何做那个WHERE(或SELECT)条件的动态形式。谢谢啦。
...全文
24538 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
devmiao 2013-11-10
  • 打赏
  • 举报
回复
引用 14 楼 q107770540 的回复:
不用谢,妹纸 下次建议你有LINQ相关问题,直接到LINQ版提问,这样会更快得到答案(因为我只会经常关注LINQ版,其他版偶尔逛逛 - -!)。。。 http://bbs.csdn.net/forums/LINQ
喵~
q107770540 2013-11-10
  • 打赏
  • 举报
回复
不用谢,妹纸 下次建议你有LINQ相关问题,直接到LINQ版提问,这样会更快得到答案(因为我只会经常关注LINQ版,其他版偶尔逛逛 - -!)。。。 http://bbs.csdn.net/forums/LINQ
WHATHAPPEN 2013-11-10
  • 打赏
  • 举报
回复
q107770540 版主大哥,您真的太厉害了,csdn因您而精彩,也很感谢devmiao。太好了
q107770540 2013-11-10
  • 打赏
  • 举报
回复
引用 10 楼 fulans2 的回复:
抱歉,可能是我的问题说的不好,上面的高手都会错意了。 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();
WHATHAPPEN 2013-11-10
  • 打赏
  • 举报
回复
引用 7 楼 q107770540 的回复:
妹纸,你试一下你知道了
好的。谢谢大哥,我先试下您的方法对不对哦。
WHATHAPPEN 2013-11-10
  • 打赏
  • 举报
回复
抱歉,可能是我的问题说的不好,上面的高手都会错意了。 string[] titleContains = "AAA,BBB,CCC,DDD,EEE".Split(',')//这个地方是动态的!!!!!!!!!!!可能是别的词,需要的是查找出LIST中不包含AAA且不包含BBB不包含CCC不包含DDD不包含EEE不包含AAA这些词的产品,
q107770540 2013-11-10
  • 打赏
  • 举报
回复
引用 3 楼 fulans2 的回复:
for(int i=0;i=titleContains.length;i++){ where+=!x.Title.Contains(titleContains[i]) ;i[0]="已下架";i[1]="折扣";i[3]="无库存"...... } 上面的写法当然是不对的。但我就是想实现这样的功能。


string[] titleContains = "新品,折扣".Split(','); 
  
List<Item> it = Items.Where(x =>titleContains.Any(s=>!x.Title.Contains(s))).ToList();
q107770540 2013-11-10
  • 打赏
  • 举报
回复
这样或许会更好一些:
string[] titleContains = "新品,折扣".Split(','); 
 
List<Item> it = Items.Where(x =>titleContains.Any(s=>!s.Contains(x.Title))).ToList();
q107770540 2013-11-10
  • 打赏
  • 举报
回复
妹纸,你试一下你知道了
Andy__Huang 2013-11-10
  • 打赏
  • 举报
回复
List<Item> it = Items.Where(x => !(x.Title.Contains("新品") || x.Title.Contains("折扣")) ).ToList();
WHATHAPPEN 2013-11-10
  • 打赏
  • 举报
回复
楼上的大哥,titleContains是一个数组哦,不是字符串哦。!titleContains.Contains(x.Title)这样对吗
q107770540 2013-11-10
  • 打赏
  • 举报
回复
string[] titleContains = "新品,折扣".Split(','); 

List<Item> it = Items.Where(x =>!titleContains.Contains(x.Title)).ToList();  
WHATHAPPEN 2013-11-10
  • 打赏
  • 举报
回复
for(int i=0;i=titleContains.length;i++){ where+=!x.Title.Contains(titleContains[i]) ;i[0]="已下架";i[1]="折扣";i[3]="无库存"...... } 上面的写法当然是不对的。但我就是想实现这样的功能。
devmiao 2013-11-10
  • 打赏
  • 举报
回复
Where在Linq to Objects可以写成方法体: List<Item> it = Items.Where(x => { if (titleContains == "已下架,无库存") { ... } else { return !x.Title.Contains("新品") && !x.Title.Contains("折扣"); } }).ToList();
devmiao 2013-11-10
  • 打赏
  • 举报
回复
如果是and 可以两次过滤,比如 query = ... query = query.Where(x => 条件1) query = query.Where(x => 条件2) 如果是or 可以两次分别过滤取并集 query = ... query1 = query.Where(x => 条件1) query2 = query.Where(x => 条件2) query = query1.Union(query2)

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧