我有两个List项,如何编写linq查询来比较两者并提取公共项目。(如列表c,如下所示)
List<string> a = {a, b, c, d}
List<string> b = {c, d, e, f}
List<string> c = {c, d}
答案 0 :(得分:11)
使用LINQ Intersect
方法。
var commonItems = a.Intersect(b);
变量commonItems
将是列表a
和列表b
中常见项的集合,即["c","d"]
答案 1 :(得分:2)
您也可以致电List.FindAll
:
List<string> listA = {a, b, c, d}
List<string> listB = {c, d, e, f}
List<string> listC = listA.FindAll(elem => listB.Contains(elem));
答案 2 :(得分:1)
如果你想用linq查询:
var c = a.Where(x => b.Contains(x))
答案 3 :(得分:1)
因为它们对两个列表都是通用的,所以我们可以从一个列表中获取另一个列表中的项目。像这样:
List<string> c = a.Intersect(b)
.ToList();
这可以理解为:“从列表a中选择项目,使列表b中的至少一个项目具有相同的值。”
请注意,这仅适用于具有可用等式方法的值类型和引用类型。
答案 4 :(得分:1)
Linq方式:
List<string> c = (from i in a
join j in b
on i equals j
select i).ToList();