0

汎用の EF リポジトリがあり、ネストされた where ステートメントを使用してデータベースからアイテムを取得する必要があります。

var categoryGroups = repository.Categories.Where(a => a.Vehicles.Where(v => 
                   bodyTypesFilter.Any(b => b == v.BodyType)).Count() > 0);

ラムダ式の重要な部分だけを含めます。ここで bodyTypesFilter はリストであり、次の例外が発生しています。

タイプ 'System.Collections.Generic.List`1' の null 定数値を作成できません。このコンテキストでは、エンティティ型、列挙型、またはプリミティブ型のみがサポートされます。

List を含む linq to sql クエリを生成しようとしていることが原因であり、許可されていないことを理解しています。しかし、それを回避または克服する方法がわかりません。

解決策を見つけるのを手伝ってください。

4

1 に答える 1

1

その部分についてです

bodyTypesFilter.Any(b => b == v.BodyType)

bodyTypesFilter部分を SQL に変換できないため、EF クエリでオブジェクトを比較することはできません。代わりにこれを行います:

bodyTypesFilterIds.Contains(v.BodyType.Id)

(またはおそらくv.BodyTypeId

ここbodyTypesFilterIdsで、オブジェクトではなく Id 値のリストです。

(そうAnyではありません。これは、あまりにも深いネスト レベルに簡単に発展するモンスター クエリを作成するためです)。

于 2013-05-29T21:55:53.130 に答える