カテゴリとProductToCategoryの2つのテーブルがあります。エンティティフレームワークで "IN"を使用する
カテゴリにはすべてのカテゴリの名前があり、ProductToCategoryには製品に割り当てられているすべてのカテゴリのリストがあります。 1つの製品が複数のカテゴリを持つことができるため、分離されています。
私はエンティティフレームワークに新しく、特定の製品に割り当てられたカテゴリのリストを取得しようとしています。 Categoryテーブルから情報を返す必要がありますが、ProductToCategoryは、割り当てられたものを取得するために検索する場所です。
ProductTOCategoryテーブルのカテゴリIDが特定の製品IDに割り当てられているすべてのカテゴリを取得しようとしています。 SQLで
私のように入力します。あなたがここにjoin
の代わりIN
を使用することができます
SELECT (Category Fields) FROM Category WHERE Category.Id
IN (SELECT ProductToCategory.CategoryId FROM ProductToCategory
WHERE ProductId = (THE PRODUCT ID))
か、その
すべては、モデルの定義方法によって異なります。正しく定義されたナビゲーションプロパティでは、 'Products.Find(10).Categories'と同じくらい簡単になります。それで、データベースへの2回の呼び出しで終わるかもしれないので、 'Categories.Where(c => c.Products.Select(p => p.ProductId).Contains(10))' – MarcinJuraszek
まず、定数値のコレクションが必要です。次に、 'Where(x => list.Contains(x))'を使って 'IN'節を生成します。 –
SQLの 'x in(...)'がLINQ '(...)。Contains(x)'に変換されることを知っていれば、SQLクエリをLINQに入力することができます。 –