【问题标题】:ASP .Net: Linq check if string array contains string subarrayASP .Net:Linq 检查字符串数组是否包含字符串子数组
【发布时间】:2016-07-11 12:17:22
【问题描述】:

有没有办法检查一个字符串数组是否包含一个字符串子数组?数组中的元素不必与子数组中的元素完全相同,如果不是相同的字符串,它只能包含子数组的元素作为更大数组中字符串的一部分。

例如:

  • 数组["Ax", "By", "Cz", "Dw", "Eg"] 包含子数组["A", "By", "E"]
  • 数组["Ax"] 包含子数组["x"]
  • Array["Ax", "By"] 包含子数组["Ax", "By"]

我需要用 Linq 语法编写这个,我通过表单将子数组作为输入“文本”,我用 char('') 将它拆分,另一方面,我将更大的数组作为字符串由数据库字段中的 char('') 拆分。

我想做的是在客户端做“搜索”,检查我是否可以部分过滤我的数据库结果。

我通过输入文本字段从客户端浏览器获取我的子数组,这没关系,但我正在根据从数据库获得的每个结果创建数组:

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

我需要通过auction.productName.split(' ') - 那将是数组。

需要通过检查每个 productName.split(' ') 是否包含 string[] words 子数组来过滤拍卖 var。

【问题讨论】:

    标签: c# arrays string linq


    【解决方案1】:

    如果您要检查的是:子数组的所有项目是否都包含在“父”数组中,那么试试这个:

    subArray.All(subItem => array.Any(item => item.Contains(subItem)));
    

    【讨论】:

    • 是的,这正是我所需要的,但我有一点问题:var auctions = from o in db.auctions select o;像这样我从数据库中得到我的结果,我更大的数组应该是:每个auction.productName.split('')。我有较小的数组,如 string[] 数组,但我在 var 拍卖中从每个拍卖结果中制作了更大的数组?
    • @luka032 - 不明白你的问题
    • 我已经编辑了我的问题,所以我希望我现在已经说得更清楚了。
    【解决方案2】:

    您需要检查子数组中的所有元素是否至少在原始数组中具有匹配字符串,其中子字符串是原始字符串的子集。

    不区分大小写:

    string[] array = new string[] { "Ax", "By", "Cz", "Dw", "Eg" };
    string[] subArray = new string[] { "A", "By", "E" };
    
    bool result =
    subArray.All(sub => array.Any
            (item => item.IndexOf(sub, StringComparison.InvariantCultureIgnoreCase) >= 0));
    

    【讨论】:

      猜你喜欢
      • 2021-12-14
      • 2019-02-04
      • 2022-06-30
      • 1970-01-01
      • 2020-11-28
      • 2018-05-04
      • 1970-01-01
      • 1970-01-01
      • 2021-06-10
      相关资源
      最近更新 更多