Linq使用Where过滤db记录(string.Contains(“字符串数组而不是单个字符串”))

时间:2016-07-11 01:25:00

标签: c# asp.net-mvc linq

我正在使用ASP .Net MVC,我想过滤我的数据库结果集,直到现在我一直在使用这种方法:

var auctions = from o in db.auctions select o;

我会检查用户是否从客户端表单传递了一些模式(searchName),因此结果集将被过滤:

 if (!String.IsNullOrEmpty(searchName))
 {
 auctions = auctions.Where(a => a.product_name.Contains(searchName));
 }

如果我想检查产品名称是否包含单个字符串变量,那就没关系了,但是我需要检查产品名称是否包含从客户端表单中作为字符串传递的数组字符串的任何字符串,并使用如下所示的空白字符串进行拆分:

string[] words = searchName.Split(' ');
auctions = auctions.Where(a => a.product_name.Contains(anyStringInArrayWords));

我怎么能最终将这个 anyStringInArrayWords lambda印象发送到auction.Where()?

3 个答案:

答案 0 :(得分:3)

您可以以不同方式重写where条件语句。

auctions = auctions.Where(a => words.Contains(a.product_name));

答案 1 :(得分:0)

您可以使用.Any扩展方法来获取结果。

var q= auctions.Any(item => words.Any( word=> item.ProductName.Contains(word))

由移动设备撰写且未经过测试

答案 2 :(得分:0)

我同意 Hakunamatata ,如果您要查找不区分大小写的搜索,Contains会重载以接受IEqualityComparer。因此,您可以使用...

执行不区分大小写的搜索
auctions = auctions.Where(a => words.Contains(a.product_name, StringComparer.CurrentCultureIgnoreCase));