2009-12-18 2 views
0

У меня есть SQL-запрос, который мне нужно перевести на Linq to SQL. Я был успешным, пока он не пришел к Sums, и я полностью застрял там. Я знаю, как делать одиночные/простые группировки и суммы, но на этот раз мне отчаянно нужна помощь. Буду признателен за любые идеи.Запрос Linq с несколькими суммами, группировками и объединениями

Таблица отношений, как это:

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 table.

Вот мой 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 

И я застрял прямо здесь. Буду признателен за любую помощь.

ответ

0

Посмотрите на продукт под названием Linqer (у меня нет связи с ним). Он преобразует запросы T-SQL в LINQ. Фантастический инструмент. Мне нужно выполнить запрос, который он не смог преобразовать. Существует 30-дневная пробная версия. Стоимость составляет около 60 долларов.

Randy

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