У меня есть SQL-запрос, который мне нужно перевести на Linq to SQL. Я был успешен, пока не пришел к Сумам, и я полностью застрял там. Я знаю, как делать простые / простые группировки и суммы, но на этот раз мне очень нужна помощь. Буду признателен за любые идеи.
Табличные отношения такие:
TreeNodes - one-to-many - Dispatches (not every TreeNode has Dispatch entry)
Dispatches - one-to-many - DispatchesJobs (not every Dispatch has DispatchJob entry)
DispatchesJobs one-to-many - DispatchesJobsReceivings (not every DispatchJob has DispatchJobReceiving entry)
В основном мне нужно выяснить:
Для каждой отправки:
Получите имя TreeNode отправления и его количество, потраченное количество возвращаемых данных из таблицы DispatchesJobsReceivings.
Вот мой SQL-запрос:
select t.TreeNodes_id, t.name
sum(djr.quantity) as quantity, sum(djr.returns) as returns, sum(djr.spent) as spent
from TreeNodes as t
inner join Dispatches as d
on t.TreeNodes_id = d.TreeNodes_id
left outer join DispatchesJobs as dj
on d.Dispatches_id = dj.Dispatches_id
left outer join DispatchesJobsReceivings as djr
on dj.DispatchesJobs_id = djr.DispatchesJobs_id
group by t.TreeNodes_id, t.name
Что дает этот результат:
TreeNodes_id name quantity returns spent
------------ ------------ ------- ------- ----------
77 CEMENT 20 17 3
122 SAND NULL NULL NULL
Я зашел так далеко, переводя это:
from t in db.TreeNodes
join d in db.Dispatches
on t.TreeNodes_id equals d.TreeNodes_id
join dj in db.Dispatches_Jobs
on d.Dispatches_id equals dj.Dispatches_id
into tmpDJ
from rowTmpDJ in tmpDJ.DefaultIfEmpty()
join djr in db.DispatchesJobsReceivings
on rowTmpDj.DispatchesJobs_id equals djr.DispatchesJobs_id
into tmpDjr
from rowTmpDjr in tmpDjr.DefaultIfEmpty()
select new
{
TreeNode_id = t.TreeNodes_id,
name = t.name,
quantity = rowTmpDjr.quantity,
returns = rowTmpDjr.returns,
spent = rowTmpDjr.spent
};
Что дает этот результат:
TreeNodes_id name quantity returns spent
------------ ------------ ------ -------- ----------
77 CEMENT 1 0 1
77 CEMENT 2 0 2
77 CEMENT 4 4 0
77 CEMENT 13 13 0
122 SAND NULL NULL NULL
И я застрял прямо здесь. Буду признателен за любую помощь.