【问题标题】:How linq between 2 lists by StartsWithStartsWith 如何在 2 个列表之间进行 linq
【发布时间】:2024-05-02 07:55:02
【问题描述】:

我有两个字符串列表。

var list1 = new List<string> { "1", "12", "21", "34", "22" };
var list2 = new List<string> { "1", "2" };

我需要选择 list1 的项目,其中项目 StartsWith 由​​ list2 中的项目:"1", "12", "21", "22"

//foreach solution :  "1", "12", "21", "22"
var result1 = new List<string>();
foreach (var item in list2)
    result1.AddRange(list1.Where(x => x.StartsWith(item)).ToList());

//linq solution : "1"
var result2 = list1.Where(x => list2.Contains(x)).ToList();

如何通过 linq 解决方案获得result1

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    您可以将WhereAny 结合使用,例如:

    var query = list1.Where(s1 => list2.Any(s2 => s1.StartsWith(s2))).ToList();
    

    你最终会得到:

    {"1","12","21","22"}
    

    另一种选择是进行交叉连接,然后查询如下:

    var query = from s1 in list1
                from s2 in list2
                where s1.StartsWith(s2)
                select s1;
    

    【讨论】:

      【解决方案2】:
      var result = list1.Where(x => list2.Any(y => x.StartsWith(y)).ToList();
      

      【讨论】:

        【解决方案3】:

        使用NinjaNye.SearchExtensions,您可以执行以下操作

        using NinjaNye.SearchExtensions;
        
        
        var query = list.Search(x => x).StartsWith(list2);
        

        【讨论】: