2016-04-29 3 views
3

私は2つのIEnumerableオブジェクトを持っていて、そのうちの1つに他のすべての要素が含まれている場合は検証したいと思います。IEnumerableにIEnumerableが含まれています

私はobj1.Intersect(obj2).Any()を使用していますが、交差点は期待通りに機能しません。 obj2のいずれかの要素がobj1に存在する場合でもtrueを返します。

obj2のすべての要素がobj1に存在するかどうかを確認する方法はありますか?

+2

利用代わりに '' Intersect.Any'のALL':ここではいくつかのオプションがある(obj2obj1のサブセットであるかどうかをテストするために) – zerkms

+0

同じ順序でそれらを使いたい場合は、 'SequenceEqual'を使うことができます。それ以外の場合は、交差部分がサブシーケンスと同じ長さであることを確認できます。 – Blorgbeard

+0

@zerkms 'All()'は動作しません。すべて何? 'Any()'はアイテムが存在することを意味し、 'All()'はラムダなしで無意味です。 – Blorgbeard

答えて

7

ラムダを指定しなくても必要なものを実行する単一のLINQメソッドはありません。しかし、LINQでそれを行うには複数の方法があります。

obj1.Intersect(obj2).Count() == obj2.Count() 

または

obj2.All(x=>obj1.Contains(x)) 

または

obj2.Except(obj1).Any() 
+4

'obj2'が重複している場合、最初のものは誤検出を返すかもしれません。 – zerkms

+0

最初のオプションが機能しました! @zerkmsあなたは正しいです...私は重複が存在しないことを確認します。 – Snapper

+0

'.Except()'はどうですか? opが何を期待するべきか(stevenの3番目の例) – Mafii

関連する問題