0
各作業区で作成されたウィジェットの数を1時間間隔で表示するためのプロダクションダッシュボードを作成しています。ウィジェットの作成には、1時間ごとに「トリガー」と「ターゲット」の値があります。私のクエリは機能します...しかし、その時間にウィジェットが作成されていない場合、特定のインターバル時間は表示されません。私は可能なすべての間隔をキャプチャするためにインターバルターゲットテーブル上で一種の左外部結合をしようとしていますが、ゼロウィジェットカウントを持つ間隔を表示できませんでした。LINQはcount - multipleテーブル結合で左結合しました。Visual Studio 2015 MVC 5 C#
dbvm.widgetSummary = from wc in db.workCenters
from w in db.widgets.Where(w => w.createdByID == wc.ID && w.packDate >= beginDate && w.packDate <= endDate)
from d in db.departments.Where(d => d.ID == wc.deptID && wc.display == true)
from g in db.goals.Where(g => g.workCenterID == wc.ID && g.hour == w.packDate.Value.Hour)
group g by new { wc.ID, wc.friendlyName, g.hour, g.trigger, g.target, d.dept } into n
select new WidgetSummary()
{
createdByID = n.Key.ID,
friendlyName = n.Key.friendlyName,
hour = n.Key.hour,
actualWidgets = n.Count(),
triggerWidgets = n.Key.trigger,
targetWidgets = n.Key.target,
variance = (n.Count() - n.Key.target),
dept = n.Key.dept
};
return View(dbvm);
というクエリを使用してください。この複雑なクエリでは、EFまたはLinq-To-SQLを実行しようとするよりも、まっすぐなSQLを使用することを推奨します。 – Cameron
これは私の内部結合のように見えます。私は通常、DefaultIfEmpty'が残っているのを見ています。 –
ありがとうございます - 私はDefaultIfEmpty()のいくつかの組み合わせを試しましたが、目的の結果を得たバージョンはありませんでした。 – scootsch