【问题标题】:Linq filtering db records using Where (string.Contains("string array instead of single string") )Linq 使用 Where (string.Contains("string array instead of single string") 过滤数据库记录)
【发布时间】:2016-07-11 01:24:59
【问题描述】:

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

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

我会检查用户是否从客户端表单传递了一些模式(搜索名称),以便过滤结果集:

 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 展示发送到拍卖。Where()?

【问题讨论】:

    标签: c# asp.net-mvc linq


    【解决方案1】:

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

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

    【讨论】:

    • 这个答案是正确的,但这里的例子我不确定我是否设置了正确的问题,例如我的拍卖名称是:Test Auction Case,当我输入 searchName:Test Case 时我想得到过滤后的此次拍卖。
    【解决方案2】:

    您可以使用任何扩展方法来获取您的结果。

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

    由移动设备编写,未经测试

    【讨论】:

      【解决方案3】:

      我同意 Hakunamatata,如果您正在寻找不区分大小写的搜索 Contains 被重载以接受 IEqualityComparer。因此,您可以使用...执行不区分大小写的搜索。

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

      【讨论】:

        猜你喜欢
        • 2022-12-27
        • 1970-01-01
        • 2022-12-01
        • 2016-01-16
        • 1970-01-01
        • 2021-12-27
        • 1970-01-01
        • 2012-10-27
        • 1970-01-01
        相关资源
        最近更新 更多