Comapring两个List <string>以提取公共项并将其放入List

时间:2016-02-04 19:01:23

标签: c# asp.net .net linq lambda

我有两个List项,如何编写linq查询来比较两者并提取公共项目。(如列表c,如下所示)

List<string> a = {a, b, c, d}
List<string> b = {c, d, e, f}

List<string> c = {c, d}

5 个答案:

答案 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();