linq avg on groups count

时间:2017-03-18 16:06:57

标签: linq count group-by average

请考虑这个简单的课程

public class SEANCE 
{
    int ID_SEANCE {get;set;}
    DateTime SEA_DATE {get;set;}
}

适用于健身管理应用程序,SEANCE类是成员的会话表。

这是我的起始查询,用于显示按日时分组的会话数

var lst = ctx.SEANCES
.GroupBy(o => o.SEA_DATE.Hour)
.Select(g => new ChartData()
{
    DT = new DateTime(2017, 01, 01, g.Key, 0, 0),
    VALUE = g.Count()
});


return lst.OrderBy(a => a.DT).ToList();

如您所见,它返回按小时分组的会话总数。 我想要的是平均会话数按天按小时分组,这就是我有点迷失的地方:p

这就是我的意思 enter image description here

例如在18,1500对应于那时的会话总数。

我想要的是每天的平均数

希望现在有意义:))

1 个答案:

答案 0 :(得分:0)

ctx.SEANCES.Count() / lst.Count(),但这似乎是数据库源,因此最好使用结果:

var groups = ctx.SEANCES
                .GroupBy(s => s.SEA_DATE.Hour)
                .OrderBy(g => g.Key)
                .Select(g => new ChartData() 
                {
                    DT = g.First().SEA_DATE, 
                    VALUE = g.Count()
                })
                .ToList();

var averageByHour = groups.Average(c => c.VALUE);

var averageByDay = groups.GroupBy(s => s.DT.Day).Average(g => g.Sum(c => c.VALUE));