如何通过 StartsWith 在 2 个列表之间进行 linq

Ehs*_*san 0 c# linq

我有两个字符串列表。

var list1 = new List<string> { "1", "12", "21", "34", "22" };
var list2 = new List<string> { "1", "2" };
Run Code Online (Sandbox Code Playgroud)

我需要选择 list1 的项目,其中 item 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();
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到result1linq解决方案?

Hab*_*bib 5

Where您可以使用以下组合Any

var query = list1.Where(s1 => list2.Any(s2 => s1.StartsWith(s2))).ToList();
Run Code Online (Sandbox Code Playgroud)

你最终会得到:

{"1","12","21","22"}
Run Code Online (Sandbox Code Playgroud)

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

var query = from s1 in list1
            from s2 in list2
            where s1.StartsWith(s2)
            select s1;
Run Code Online (Sandbox Code Playgroud)