1

以下を有する:

public List<int> List1 { get; set; }
...
var x = GiveMeObject(); // x.List2 --> each element on list2 has an Id (int).
...
bool containsAtLeastOne = ???

list1 の少なくとも 1 つの要素が list2 にあるかどうかを確認するための (linq での) 最も簡単/最速/最短の方法は何ですか?

ありがとう

4

2 に答える 2

8
bool containsAtLeastOne  = x.List2.Any(li => List1.Contains(li.Id));
于 2013-01-29T07:48:27.153 に答える
4

別:Intersect

bool containsAtLeastOne = List1.Intersect(x.List2.Select(e => e.Id)).Any()

コレクションが大きくなっている場合は、 の代わりに を使用する必要があります。Intersectは少なくとも と同じくらい高速です。コレクションによっては、すぐに遅くなる可能性があります。ContainsIntersectContainsContains

コレクションが非常に小さい (< 1000 要素) 場合、この違いはおそらく問題になりません。


非LINQの方法とさらにいくつかのコード行を気にしない場合は、次を使用できます

var tmp = new HashSet<int>(x.List2.Select(e => e.ID));
tmp.IntersectWith(list1);
bool containsAtLeastOne = tmp.Any();

これはおそらくLINQアプローチよりも高速です。

于 2013-01-29T07:54:33.607 に答える