2017-07-12 4 views
0

フィルタクエリに次のクエリを書きました。linqを使用して別のリストから1つのリストをフィルタリングするには

私はFirst()を使用しました。これは、先に気付かなかった問題を引き起こしています。Entity2もコレクションであるためです。最初のIDだけがフィルタリングされます。

query = query.Where(x => filter.Ids.Contains(x.Entity2.Select(y => y.testId).First())); 

containsを使用してEntity2のすべてのtestIdプロパティをチェックする方法をお勧めしますか?

基本的にx.Entity2.Select(Y => y.testId)私は、彼らがfilter.Idsに含まれているかいないかどうかを確認する をしたいIDのリストです。

答えて

2

私が正しく理解していれば、Idsがあればfilter.Idsx.Entity2.Select(y => y.testId)は両方のリストであり、あなたはx.Entity2からのすべてのIDがfilter.Idsでもあることを確認します。その場合は、次の希望:

var result = query.Where(x => x.Entity2.Count(y => filter.Ids.Contains(y.testId)) == x.Entity2.Count); 

我々がここでやっているが、我々はqueryの各要素のためにカウントされている、それに両方ともIDの数がEntity2filter.Idsにあります。その数がEntity2のIdの総数と等しい場合は、結果にその数を含めます。

0

あなたもAny()Contains()の両方を使用することができます上記のクエリのために、それはフィルタリングあなたによると として動作するのIdsとEntity2の両方を持って集めたものですので

query = query.Where(x => filter.Where(a=> a.Entity2.Any(y=> a.Ids.Contains(y.testId));、私がこれを書いたと仮定し、また、収集されています

First()を削除してToList()を使用することもできますが、データが大きい場合はOutofMemoryExceptionをスローします。

関連する問題