1

给定一个包含一个月数据列表的数据,我需要计算过去 2 周的总和。我可以通过在 14 天和 7 天内打破列表并计算每个的总和来做到这一点。

有没有一种优雅的方式来实现上述目标?

数据列表示例如下所示:

startDate 2012-05-01
value 1

startDate 2012-05-02
value 1
........

startDate 2012-05-31
value 1

谢谢。

4

1 回答 1

2

你的意思是你想要过去两周每一周的总和,还是过去两周一个值?后者比前者更容易:

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) });
于 2012-06-01T07:10:21.340 回答