22

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

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

bool match = 
    // Some LINQ expression

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

4

4 回答 4

43

当然有。

A.Intersect(B).Any();

Intersect在最不期望的情况下总是有用的。

于 2013-07-01T18:28:09.927 回答
8

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

bool match = A.Any(a => B.Any(b => b == a));
于 2013-07-01T18:28:23.923 回答
3

你也可以使用

A.Any(x => B.Contains(x))
于 2013-07-01T18:29:50.297 回答
2

您正在寻找IntersectAny

bool match = A.Intersect(B).Any();
于 2013-07-01T18:29:17.773 回答