给定一个包含一个月数据列表的数据,我需要计算过去 2 周的总和。我可以通过在 14 天和 7 天内打破列表并计算每个的总和来做到这一点。
有没有一种优雅的方式来实现上述目标?
数据列表示例如下所示:
startDate 2012-05-01
value 1
startDate 2012-05-02
value 1
........
startDate 2012-05-31
value 1
谢谢。
你的意思是你想要过去两周每一周的总和,还是过去两周的一个值?后者比前者更容易:
DateTime end = DateTime.Today;
// Note: inclusive at both ends, so this gives us 14 days in total
DateTime start = end.AddDays(-13);
var sum = data.Where(x => x.StartDate >= start && x.StartDate <= end)
.Sum(x => x.Value);
请注意,在这里进行DateTime.Today
一次评估很重要,否则如果查询在“午夜”左右执行,您最终可能会得到一组不一致的比较。
如果您的数据不包含任何未来值,您end
当然可以删除该部分。您还应该仔细考虑您是真的要减去 13 天还是 14 天。
编辑:好的,现在您已经阐明了要求,听起来最简单的方法实际上是执行两个查询 - 一个针对过去 7 天,一个针对之前的 7 天。或者,您可以通过分组使用它:
DateTime end = DateTime.Today;
// Note: inclusive at both ends, so this gives us 14 days in total
DateTime start = end.AddDays(-13);
var sum = data.OrderBy(x => x.StartDate)
.Where(x => x.StartDate >= start && x.StartDate <= end)
.GroupBy(x => ((int) (end - x.StartDate).TotalDays) / 7)
.Select(g => new { Start = g.First().StartDate,
Sum = g.Sum(x => x.Value) });