-1

この SQL ステートメントを VB の Linq ステートメントに変換しようと、いろいろと調べて長い時間を費やしました。他の人にとっては良い例になると確信しています-ステートメントは、製品カテゴリと多対多の関係を持つ製品を取得しようとしており、カテゴリには親/子の階層があります.

変換しようとしているクエリは次のとおりです。

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)」と言おうとしているところまで到達できますが、その部分を理解できません。

ありがとう!

4

1 に答える 1

0

質問を投稿した直後にそれを理解しましたが、他の誰かが役に立つと思った場合の答えは次のとおりです。

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)

私が除外していたのは、「From cParents In C_Parents.DefaultIfEmpty()」という行でした。

于 2009-07-04T18:36:44.423 に答える