0
我创建一个生产仪表板以显示每个工作中心产生的小部件的数量,间隔为一小时。在每个小时的过程中,小部件制作都有“触发器”和“目标”值。我的查询工作正常......但是如果在那个小时内没有生成小部件,它不会显示特定的时间间隔。我试图在间隔目标表上执行一种左外连接来捕获所有可能的时间间隔,但一直未能显示具有零小部件计数的间隔。LINQ左连接count - 多表连接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);
有了这个复杂的查询,我会主张使用直接sql而不是尝试执行EF或Linq-To-SQL。 – Cameron
这些看起来像内部加入我。当他们离开连接时,我通常会看到'DefaultIfEmpty' –
谢谢 - 我已经尝试了DefaultIfEmpty()的几种组合,但都没有得到所需结果的版本。 – scootsch