我正在尝试编写一个查询,该查询返回在票务系统中的工作上花费的平均时间。 每个作业都有多个时间日志,因此我需要按SO编号进行分组,然后以某种方式获得所有结果的平均值。
当前查询返回每个服务订单的列表以及花在该作业上的总分钟数。
如何向我展示每项工作所花费的平均时间?
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))
}
== EDIT ==
这看起来很接近,但它给了我每次登录的平均值,而不是每个SO的总时间日志的平均值。
请帮帮忙?
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))
答案 0 :(得分:0)
我大部分时间都在努力,希望这可以帮助别人。
我的问题的第一部分是将所有结果都放到同一组中而没有Group By
的明显价值。这是通过在Group By
中声明一个字符串来实现的,例如“Total”。
例如:
group tblName.FieldName by "Example" into group1
对于第二部分,我需要在另一个Group By
的{{1}}上执行Sum
。以下是声明从Group By
的{{1}}生成的两个新值的示例:
Sum
以下是我最后编写的代码的完整示例,它在Group By
中运行良好,但我仍在致力于group new { tblName.FieldName1, tblName.FieldName2} by tblName into group1
group new { SumField1 = g.Sum (x => x.FieldName1), SumField2 = g.Sum (x => x.FieldName2) } by "Totals" into newgroup2
LINQPad
Visual Studio
的实现。
C#