2009-12-18 53 views
0

我有一個SQL查詢,我需要將LINQ轉換爲SQL。我成功了,直到它來到Sums,我完全陷在那裏。我知道如何做單個/簡單的分組和總結,但這次我非常需要幫助。我會很感激任何想法。林克查詢與多個總和,分組和連接

表的關係是這樣的:

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 

我已經走到這一步它翻譯:

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美元。

蘭迪