假设我有一个>,PageHit具有以下属性:List<PageHitDateTime RequestTime

最终,我想要做的是将每个RequestTime值四舍五入到最接近的30分钟增量(使用How can I round up the time to the nearest X minutes?),将它们分组在一起,并获得该增量块的PageResponseTime的总体平均值(现实世界中的用户故事:跟踪每30分钟的平均页面响应时间)。

据我所知,但是我的大脑不会立即向我展示如何有效地获得每个增量的平均值,而不会出现总循环。在步骤1中有没有办法做到这一点?

// Step 1: round all request times up
pageHitList.ForEach(x => x.RequestTime = x.RequestTime.RoundUp(TimeSpan.FromMinutes(30));

// Step 2: Get the average of each increment block
?

最佳答案

还没有测试过,但这就是我要做的:

var avg = pageHitList.GroupBy(x => x.RequestTime.RoundUp(TimeSpan.FromMinutes(30)));
                     .Select(hit => new {
                                 hit.Key,
                                 Average = hit.Average(x => x.PageResponseTime)
                             });

10-07 23:17