我想要添加GroupBy
语句。我有两张桌子可供选择:
MU_Reports表
Date | Shift | Machine | MU
1/12/2016 | 1 | 12 | 44%
1/12/2016 | 2 | 12 | 34%
1/12/2016 | 2 | 12 | 34%
1/12/2016 | 3 | 12 | 54%
1/12/2016 | 3 | 13 | 24%
DownTime_Reports表
Date | Shift | Machine | DT Code | DT_Hours
1/12/2016 | 1 | 12 | No Work | 3
1/12/2016 | 2 | 12 | No Resin | 2
1/12/2016 | 2 | 12 | No Op. | 4
1/12/2016 | 3 | 12 | No Work | 1
1/12/2016 | 3 | 13 | No Work | 5
1/12/2016 | 3 | 12 | No Work | 5
示例输出:
Date | Shift | Machine | MU | No_Work_Hours
1/12/2016 | 1 | 12 | 44% | 3
1/12/2016 | 2 | 12 | 68% | 0
1/12/2016 | 3 | 12 | 54% | 6
1/12/2016 | 3 | 13 | 24% | 5
我当前的GroupBy
语句在一个班次(无论是日期还是机器)中将所有“无工作”添加到一起:
using (var db = new ProductionContext())
{
var query2 = from b in db.MU_Reports
join downtime in db.Downtime_Reports on new { b.Shift, b.Date, b.Machine_Number } equals new { downtime.Shift, downtime.Date, downtime.Machine_Number }
where downtime.DT_Code.Equals("No Work")
group downtime by new { b.Date, b.Shift, b.Machine, b.MU } into g
select new
{
Date = g.Key.Date,
Shift = g.Key.Shift,
Machine = g.Key.Machine,
MU = g.Key.MU,
NWTotal = g.Sum(x => x.No_Work_Hours)
};
}
正如您在我的示例输出中所看到的,我想要做的是同时在特定日期,班次和机器中添加所有No Work。因此换句话说,我必须通过Down_Time表来查看正确的日期然后查看这些日期以获得正确的班次然后获得正确的机器然后获得正确的DT理由以获得小时数。
编辑:我更新了代码,因为我试图进行多次连接,但是,现在我根本没有输出任何内容。
答案 0 :(得分:0)
有几种方法可以产生所需的输出。他们需要首先按MU_Reports
,Date
和Shift
对Machine
表进行分组。然后,您可以通过DownTime_Reports
,Date
和Shift
将分组的子查询group join to_timedelta
到Machine
表并执行聚合:
var query =
from rg in db.MU_Reports.GroupBy(r => new { r.Date, r.Shift, r.Machine })
join dt in db.Downtime_Reports
on new { rg.Key.Date, rg.Key.Shift, rg.Key.Machine }
equals new { dt.Date, dt.Shift, dt.Machine }
into dtGroup
select new
{
rg.Key.Date, rg.Key.Shift, rg.Key.Machine,
MU = rg.Sum(r => r.MU),
NWTotal = dtGroup.Where(dt => dt.DT_Code == "No Work").Sum(dt => dt.DT_Hours)
};