2011-12-05 5 views
0

ProductおよびProductCategoryテーブルは、多対多テーブルProductToCategoryを介して「接続」されています。いくつかのIDを持ついくつかの製品については多対多のテーブルが関係する最小linqクエリを書くにはどうすればいいですか?

(のはproduct_1としてそれをマークしてみましょう)私はproduct_1と同じカテゴリの次の製品を取得する必要があります。

というクエリでこれを実行したかったので、次のクエリは機能しますが、SQLプロファイラは非常に巨大なクエリを示しています。クエリを書き直す方法はありますか?

(from p in cxt.Products 
join c in cxt.ProductToCategories on p.Id equals c.ProductId 
where p.Id > id && c.CategoryId == (from p2 in cxt.Products 
            join c2 in cxt.ProductToCategories on p.Id equals c.ProductId 
            where p2.Id == id 
            select c2.CategoryId).FirstOrDefault() 
orderby p.Id 
select p).FirstOrDefault(); 
+0

これはちょっとあいまいだと思うので、データサンプルを投稿してください:商品とカテゴリーの次の商品のことを言っています(同じカテゴリは1つのカテゴリを意味しますが、これはam:nそれらは複数のカテゴリに分類されます) – danihp

答えて

0

注:私は

を言われたとき、私はproduct_1と同じカテゴリの次の製品を取得する必要があるとします。本当に何を意味するのか

は、私がproduct_1のカテゴリのいずれかの次の製品を取得する必要があります

です。

(from p in ctx.Products 
join c in cts.ProductsToCategories on c.ProductId 
join c2 in cts.ProductsToCategories on c.CategoryId = c2.CategoryId 
join p2 in ctx.Products on c2.ProductId = p2.id 
where 
    p2.Id == id && 
    p2 != p 
orderby p).FirstOrDefault(); 
+0

@aF。文法の改善に感謝します。 – danihp

0

私はあなたがNextProductInCategoryというデータベース内のビューを作成し、あなたが望むものを取得するために、単純なLINQクエリを持ってお勧めします。

関連する問題