-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)

这是我遗漏的“来自 C_Parents.DefaultIfEmpty() 中的 cParents”的行。

于 2009-07-04T18:36:44.423 回答