Lambda:有效地查找,修改,然后对元素进行分组

Mat*_*att 1 c# lambda

假设我有一个,PageHit具有以下属性: 和.List<PageHit>DateTime RequestTimeint PageResponseTime

最终我要做的是将每个RequestTime值四舍五入到最接近的30分钟增量(使用如何将时间向上舍入到最接近的X分钟?),将它们组合在一起,并获得该页面的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
?
Run Code Online (Sandbox Code Playgroud)

Jos*_*ant 5

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

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