SQL для Linq: ПРАВИЛЬНОЕ СОЕДИНЕНИЕ в LINQ - PullRequest
2 голосов
/ 13 февраля 2012

Кто-нибудь может мне помочь преобразовать какой-нибудь SQL-запрос с правильным соединением, подобным этому, в 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)

Ответы [ 2 ]

2 голосов
/ 13 февраля 2012

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

1 голос
/ 13 февраля 2012

Я позволил себе немного улучшить ваш 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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...