2009-10-26 9 views
2

Je ne sais pas comment convertir cette instruction SQL en LINQ qui utilise OUTER APPLY et TOP. Est-ce que quelqu'un peut donner une idée de la façon de faire? Merci!Comment convertir cette instruction SQL en LINQ?

SELECT Cust.CustomerName, Ord.OnlineOrderTitle, Pro.ProductTitle, 
Pic.PictureFilename, PCom.PictureCommentText, Ord.OnlineOrderDateAdded 
FROM Customer as Cust 
OUTER APPLY 
(SELECT * FROM OnlineOrder 
WHERE CustomerID = Cust.CustomerID) as Ord 
OUTER APPLY 
(SELECT * FROM Product 
WHERE OnlineOrderID = Ord.OnlineOrderID) as Pro 
OUTER APPLY 
(SELECT TOP 1 * FROM Accessory 
WHERE ProductID = Pro.ProductID) as Acc 
OUTER APPLY 
(SELECT TOP 1 * FROM Picture 
WHERE ProductID = Pro.ProductID) as Pic 
OUTER APPLY 
(SELECT TOP 1 * FROM PictureComment 
WHERE PictureID = Pic.PictureID) as PCom 
ORDER BY Ord.OnlineOrderDateAdded DESC 
+0

Maybve pas tout à fait ce que vous voulez mais il est certainement un travail autour. – Rippo

+2

Cela ressemble un peu à un 'join 'sur-machiné. Peut-être pouvez-vous le réécrire en tant que «join» dans T-SQL, puis le convertir en LINQ-to-SQL? – bzlm

Répondre

1

LINQ ne prend pas en charge externe de type SQL rejoint nativement (au sens de l'addition horizontale de resultsets), mais vous pouvez les simuler très facilement en faisant un groupé se joindre et de retourner un groupe vide si la jointure ne trouve pas résultats. Jetez un oeil sur les pages MSDN How to: Perform Left Outer Joins (C# Programming Guide) et How to: Combine Data with LINQ by Using Joins (Visual Basic). Pourquoi ne pas en faire une vue SQL et l'utiliser de cette façon?

+0

Merci pour ces liens. Très utile. –

Questions connexes