2012-02-13 6 views
2

Кто-нибудь может помочь мне преобразовать какой-нибудь sql-запрос, который прямо присоединяется к linq?SQL to Linq: RIGHT JOIN в LINQ

SELECT dbo.FinnTrans.SanadID, dbo.FinnTrans.Date, dbo.FinnAccount.ID AS AccID, 
dbo.FinnAccount.FullId, dbo.FinnAccount.Name, SUM(dbo.FinnTrans.Debit) AS TotalDebit, 
SUM(dbo.FinnTrans.Credit) AS TotalCredit 
FROM dbo.FinnAccount AS FinnAccount_1 LEFT OUTER JOIN 
dbo.FinnAccount ON FinnAccount_1.ParentId = dbo.FinnAccount.ID RIGHT OUTER JOIN 
dbo.FinnTrans LEFT OUTER JOIN 
dbo.FinnAccount AS FinnAccount_2 ON dbo.FinnTrans.AccID = FinnAccount_2.ID ON 
FinnAccount_1.ID = FinnAccount_2.ParentId 
WHERE (dbo.FinnTrans.FPID = 7) AND (FinnAccount_2.AccLevel = 3) 
GROUP BY dbo.FinnTrans.SanadID, dbo.FinnTrans.Date, dbo.FinnAccount.ID, 
dbo.FinnAccount.Name, dbo.FinnAccount.FullId 
HAVING (dbo.FinnTrans.SanadID = 1) 
+0

http://stackoverflow.com/questions/2730810/right-outer-join-in-linq – adontz

+0

Это не является действительной TSQL, нет условия соединения для прямо присоединиться. – Jodrell

+0

и 2 для следующего левого внешнего – Jodrell

ответ

2

Вы можете посмотреть здесь: http://www.hookedonlinq.com/OuterJoinSample.ashx как пример левого внешнего соединения. И вы всегда можете поменять местами, чтобы получить либо левый, либо правый

1

Я немного пошутил над вашим TSQL.

Последние два условия соединения выглядят неверными, поэтому этот TSQL не может быть проанализирован.

SELECT 
        [t].SanadID 
       , [t].Date 
       , [a].ID [AccID] 
       , [a].FullId 
       , [a].Name 
       , SUM([t].Debit) [TotalDebit] 
       , SUM([t].Credit) [TotalCredit] 
    FROM 
       dbo.FinnAccount [a1] 
     LEFT OUTER JOIN 
       dbo.FinnAccount [a] 
        ON [a1].ParentId = [a].ID 
     RIGHT OUTER JOIN 
       dbo.FinnTrans [t] 
     LEFT OUTER JOIN 
       dbo.FinnAccount [a2] 
        ON [a].AccID = [a2].ID 
        ON [a1].ID = [a2].ParentId 
    WHERE 
       [t].FPID = 7 
     AND 
       [a2].AccLevel = 3 
    GROUP BY 
        [t].SanadID 
       , [t].Date 
       , [a].ID 
       , [a].Name 
       , [a].FullId 
     HAVING 
       [t].SanadID = 1