2009-07-04 10 views
0

J'ai regardé tout autour et j'ai passé beaucoup de temps à essayer de convertir cette instruction SQL en une instruction Linq dans VB. Je suis sûr que ce serait un bon exemple pour les autres - la déclaration essaie d'extraire des produits qui ont une relation plusieurs-à-plusieurs avec des catégories de produits, et les catégories ont une hiérarchie de parents/enfants.Conversion de requêtes SQL vers LINQ Left Outer Join (VB.NET)

Voici la requête que je suis en train de convertir:

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) 

Je peux me lever au point où je suis en train de dire « Où ... (P_Cats.Parent = 9) » mais peut » t comprendre cette partie.

MERCI!

Répondre

1

figured it out juste après l'affichage de la question, mais voici la réponse au cas où quelqu'un d'autre trouve utile:

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) 

Il était la ligne « De cParents En C_Parents.DefaultIfEmpty() » que j'étais en laissant tomber.