2014-01-17 41 views
2

我试图做一个Group By另一个Group By的总和。如何按另一组的总和进行分组?

在LINQ中执行此操作的正确方法是什么?

下面的查询不起作用,但它旨在演示我想要实现的逻辑。

from so in TblServiceOrders 
join sologs in TblSOLogs on so.SONumber equals sologs.SONumber 

where so.DateClosed >= new DateTime(2014,01,17) 
where so.DateClosed <= new DateTime(2014,01,17) 
where sologs.ElapsedHours != 0 || sologs.ElapsedMinutes != 0 

group new {sologs.ElapsedHours, sologs.ElapsedMinutes} by sologs.SONumber into g 
group new {g.Sum (x => x.ElapsedHours), g.Sum (x => x.ElapsedMinutes)} by "Totals" into t 

select new { 
AverageHours = t.Average (x => x.ElapsedHours) 
AverageMins = t.Average (x => x.ElapsedMinutes) 
} 
+0

可能重复[LINQ如何显示在所有的GroupBy结果的平均值(http://stackoverflow.com/问题/ 21181696/linq-how-to-show-average-of-all-group-groupby) – Zache

+1

不重复,不同范围,不同问题。 –

回答

0

我已经在下面的查询工作。现在下一个谜就是为什么我不能用它来填充VS中的DataGridView。 :-(

工作查询:

from so in TblServiceOrders 
join sologs in TblSOLogs on so.SONumber equals sologs.SONumber 

where so.DateClosed >= new DateTime(2014,01,17) 
where so.DateClosed <= new DateTime(2014,01,17) 
where sologs.ElapsedHours != 0 || sologs.ElapsedMinutes != 0 

group new {sologs.ElapsedHours, sologs.ElapsedMinutes} by sologs.SONumber into g 
group new {hours = g.Sum (x => x.ElapsedHours), mins = g.Sum (x => x.ElapsedMinutes)} by "Totals" into t 

select new { 
Average = t.Average (x => (x.hours * 60) + x.mins), 
Count = t.Count() 
} 

注:

hours = g.Sum (x => x.ElapsedHours), mins = g.Sum (x => x.ElapsedMinutes) 
相关问题