繁体   English   中英

Linq按周几的平均计数

[英]Linq average count by day of week

我试图按星期几获取行实例的平均总数。 因此,在过去的一年中,我正在尝试获取周一/周二/周三/晚上发生的平均游乐设施数量。

到目前为止,这就是我所拥有的。 这给了我一周中每天的总计数,但没有平均数。

UnitOfWork.Query<WorkoutRecord>()
   .Where(x => x.WorkoutDate > baseDate)
   .GroupBy(x => SqlFunctions.DatePart("weekday", x.UploadDate))
   .Select(x => new AdminDashboardWorkoutsGroupedDay()
   {
       DayOfWeek = (DayOfWeek)x.Key,
       WorkoutCount = x.Count()
   }).ToList();

如果我对您的理解很好,最后您将尝试获得一个数字,即每个工作日的平均计数。 这需要第二组,将数据减少到一组:

UnitOfWork.Query<WorkoutRecord>()
   .Where(x => x.WorkoutDate > baseDate)
   .GroupBy(x => SqlFunctions.DatePart("weekday", x.UploadDate))
   .Select(x => new AdminDashboardWorkoutsGroupedDay()
   {
       DayOfWeek = (DayOfWeek)x.Key,
       WorkoutCount = x.Count()
   })
   .GroupBy(g => 0) // or g => "x", or whatever
   .Select (g1 => (decimal)g1.Sum(x => x.WorkoutCount) / g1.Count())
   .ToList();

这是起作用的。 感谢@Gert Arnold,您真的让我很亲近。 我必须按天分组并计算所有锻炼,然后按工作日的平均值进行分组。

UnitOfWork.Query<WorkoutRecord>()
    .Where(x => x.WorkoutDate > baseDate && x.TotalTicks > 600)
    .GroupBy(x => EntityFunctions.TruncateTime(x.UploadDate))
    .Select(x => new 
    {
        Date = x.Key ?? DateTime.UtcNow,
        TheCount = x.Count()
    })
    .GroupBy(x=> SqlFunctions.DatePart("weekday", x.Date))
    .Select (x => new AdminDashboardWorkoutsGroupedDay()
    {
        WorkoutCount = (x.Average(y=>y.TheCount)),
        DayOfWeek = (DayOfWeek)x.Key
    })
    .ToList()

尚不清楚您想要平均值的哪个属性,但是假设您拥有诸如WorkoutRecord.Duration类的属性,则应该能够获得平均值:

UnitOfWork.Query<WorkoutRecord>()
    .Where(x => x.WorkoutDate > baseDate)
    .GroupBy(x => SqlFunctions.DatePart("weekday", x.UploadDate))
    .Select(x => new AdminDashboardWorkoutsGroupedDay()
    {
        DayOfWeek = (DayOfWeek)x.Key,
        AverageDuration = x.Average(w => w.Duration)
    })
    .ToList();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM