使用LINQ搜索两个列表中至少一个匹配项

时间:2013-07-01 18:25:40

标签: c# linq

将两个列表与LINQ(查询语法或其他)进行比较的最佳方式(平均)

var A = new [] { 1, 2, 3, ... };
var B = new [] { 4, 1, 5, ... };

bool match = 
    // Some LINQ expression

当第一个列表中的至少一个元素(在这种情况下为1)等于第二个元素中的元素时,match将为真?我不需要知道有多少场比赛,甚至是哪场比赛,只是至少有一场比赛。

4 个答案:

答案 0 :(得分:32)

当然有。

A.Intersect(B).Any();

Intersect在最不期望的情况下始终有用。

答案 1 :(得分:6)

您可以使用Intersect,但这会计算您不需要的所有匹配项。所以Any更好,因为它会短路:

bool match = A.Any(a => B.Any(b => b == a));

答案 2 :(得分:3)

您也可以使用

A.Any(x => B.Contains(x))

答案 3 :(得分:2)

您正在寻找IntersectAny

的组合
bool match = A.Intersect(B).Any();