Linq to sql 具有多个和、分组和联接的Linq查询

Linq to sql 具有多个和、分组和联接的Linq查询,linq-to-sql,tsql,Linq To Sql,Tsql,我有一个SQL查询,需要将其转换为Linq到SQL。我一直都很成功,但我完全被困在那里了。我知道如何进行单/简单分组和求和,但这次我急需帮助。如果有任何想法,我将不胜感激 表关系如下所示: TreeNodes - one-to-many - Dispatches (not every TreeNode has Dispatch entry) Dispatches - one-to-many - DispatchesJobs (not every Dispatch has DispatchJob

我有一个SQL查询,需要将其转换为Linq到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)
基本上,我需要了解的是:

每次派送: 从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
 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
我一直在翻译它:

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      20     17      3
122       SAND           NULL    NULL     NULL
 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

我被困在这里了。非常感谢您的帮助。

请看一款名为Linqer的产品(我与之无关)。它将T-SQL转换为LINQ查询。神奇的工具。我不得不遇到一个它无法转换的查询。它有30天的试用期。费用大约是60美元

兰迪