0
我正在尝试编写一个查询,它将返回在售票系统中工作所花费的平均时间。 每个工作都有多个时间日志,所以我需要按SO编号进行分组,然后以某种方式获得所有结果的平均值。LINQ如何显示GroupBy中所有结果的平均值
当前查询返回每个服务订单的列表以及花费在作业上的总分钟数。
我该如何让每个工作所花的平均分钟数?
from so in TblServiceOrders
from sologs in TblSOLogs.Where(x => x.SONumber == so.SONumber).DefaultIfEmpty()
where so.DateClosed >= new DateTime(2013,07,01)
where so.DateClosed <= new DateTime(2013,07,02)
where sologs.ElapsedHours != 0 || sologs.ElapsedMinutes != 0
group new { sologs.ElapsedHours, sologs.ElapsedMinutes } by so into g
select new {
g.Key.SONumber,
elapsed = g.Average (x => (x.ElapsedHours == null ? 0 : x.ElapsedHours * 60) + (x.ElapsedMinutes == null ? 0 : x.ElapsedMinutes))
}
== ==编辑
这看起来是越来越接近,但它给我每次记录的平均,而不是总时间日志的平均值在每个左右。
请帮忙?
from so in TblServiceOrders
join sologs in TblSOLogs on so.SONumber equals sologs.SONumber
where so.DateClosed >= new DateTime(2013,07,01)
where so.DateClosed <= new DateTime(2013,07,03)
where sologs.ElapsedHours != 0 || sologs.ElapsedMinutes != 0
group sologs.SONumber by sologs into g
group new {g.Key.ElapsedHours, g.Key.ElapsedMinutes} by "Total" into t
select t.Average (x => (x.ElapsedHours == null ? 0 : x.ElapsedHours * 60) + (x.ElapsedMinutes == null ? 0 : x.ElapsedMinutes))
显示的查询不会编译,是吗?您通过ElapsesHours和ElapsedMinutes进行分组,然后使用Key.SoNumber ...您应该按照SoNumber进行分组,不需要? –
此查询是否应该在数据库或内存集合上工作?因为如果它应该在数据库上工作,那么它就有很大的问题。 – Cosmin
它应该在数据库上运行,它运行正常,它只是返回每个SO与总数。该查询不应该工作,这是我在努力获得结果的地方。 –