2009-07-04 23 views
0

このSQL文をVBのLinq文に変換しようとしています。私はそれが他の人のための良い例であると確信しています - 文は、製品カテゴリと多対多の関係を持つ製品を引き出そうとしており、カテゴリには親/子の階層があります。ここでLINQへのSQLクエリの変換左外部結合(VB.NET)

は、私が変換しようとしているクエリです:

SELECT P.ProductID, P.ProductName, P.ProductSlug, P.PartNumber 
FROM   Products AS P 
INNER JOIN Products_Categories AS PC ON PC.ProductID = P.ProductID 
INNER JOIN Categories AS C ON PC.CategoryID = C.CategoryID 
LEFT OUTER JOIN Categories AS P_Cats ON P_Cats.CategoryID = C.Parent 
WHERE  (C.CategoryID = 9) OR (C.Parent = 9) OR (P_Cats.Parent = 9) 

私は「「WHERE ...(P_Cats.Parent = 9)」言いたいことができますが、午前時点までに取得することができますその部分が出てきます。

感謝!

答えて

1

は右の質問を投稿した後、それを考え出したが、ここでは誰にもそれが参考に見つかった場合にはその答えです:

Dim query = (From products In db.Products _ 
       Join PC In db.Products_Categories On PC.ProductID Equals products.ProductID _ 
       Join C In db.Categories On PC.CategoryID Equals C.CategoryID _ 
       Group Join cat In db.Categories On cat.CategoryID Equals C.Parent Into C_Parents = Group _ 
       From cParents In C_Parents.DefaultIfEmpty() _ 
       Where (C.CategoryID = categoryID Or C.Parent = categoryID Or cParents.CategoryID = categoryID) _ 
       And products.IsDeleted = False) 

それは私がした「C_Parents.DefaultIfEmptyでcParentsから()」ラインでした除外して。

関連する問題