我有两个字符串列表。
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解决方案?
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)