2009-10-26 3 views
2

Я не знаю, как преобразовать этот оператор SQL в LINQ, который использует OUTER APPLY и TOP. Может кто-нибудь дать представление, как с этим справиться. Благодаря!Как преобразовать эту инструкцию SQL в 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

Почему бы не сделать это представлением SQL и использовать его таким образом? Maybve не совсем то, что вы хотите, но это определенно одна работа. – Rippo

+2

Это немного похоже на чрезмерное «объединение». Возможно, вы можете переписать его как «join» в T-SQL, а затем преобразовать его в LINQ-to-SQL? – bzlm

ответ

1

LINQ не поддерживает SQL-стиль внешнего соединения изначально (в смысле горизонтального сложения ResultSets), но вы можете моделировать их очень легко, делая сгруппированный присоединиться и возвращая пустую группу, если не присоединиться к находкам нет Результаты. Взгляните на страницы MSDN How to: Perform Left Outer Joins (C# Programming Guide) и How to: Combine Data with LINQ by Using Joins (Visual Basic).

+0

Спасибо за эти ссылки. Очень полезно. –

Смежные вопросы