0


0

複数のSums、Groupings、Joinを含むLinqクエリ

Linq to SQLに変換する必要がある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)

基本的に私が知る必要があるのは:

すべてのDispatchについて:DispatchesJobsReceivingsテーブルから、DispatchのTreeNode名とその使用量、戻りカウントを取得します。

これが私の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

そして、私はここで立ち往生しています。 どうぞよろしくお願いします。

1 Answer


0


Linqerという名前の製品を見てください(私はそれとは何の関係もありません)。 T-SQLをLINQクエリに変換します。 素晴らしいツール。 変換できなかったクエリを実行する必要があります。 30日間の試用版があります。 費用は約60ドルです。

ランディ