查看两个列表中匹配的项目

时间:2011-05-26 17:50:04

标签: c# linq iequalitycomparer

以免我说有两个清单

的List1:

“汤姆”, “坦率”, “雷斯”

列表2:

“弗兰克”, “汤姆”

显示汤姆和弗兰被重复所需的查询是什么?

我想要比较的列表非常大,如果我做了类似的事情:

 var q = from a in List1
         from b in List2
         where a.Name == b.Name
         select a;

这需要很长时间。

3 个答案:

答案 0 :(得分:4)

要查看列表中重复的值,您可以使用

var results = list1.Intersect(list2);

如果您有兴趣匹配这些项目并对每项进行操作,您可以使用Join

var results = from item1 in list1 
              join item2 in list2 
              on item1 equals item2 
              select new 
              {
                  // include what you want here
              };

在您的情况下,由于您正在处理字符串列表,Intersect似乎是适当的行动方案。如果您正在处理公共密钥上的匹配对象列表,您可以选择加入列表并投影结果。

答案 1 :(得分:3)

您应该使用Intersect

var items = List1.Intersect(List2); // Tom, Frank

答案 2 :(得分:3)

您可以使用intersect

List<string> list3 = list1.Intersect(list2).ToList();