如何计算linq之前每5周的金额总和?

时间:2014-08-26 05:48:18

标签: c# linq entity-framework

我在数据库中的收入表中有金额字段,以及在同一个表中创建的日期。我需要像

这样的数据
Week 1 => Sum(amount for week 1)
Week 2 => Sum(amount for week 2)
Week 3 => Sum(amount for week 3)
Week 4 => Sum(amount for week 4)
Week 5 => Sum(amount for week 5)

我的linq查询应该是什么。我正在使用实体框架。 的编辑: 比如当前周的前4周+当前周= 5周。这一周是今天的一周。例如。今天是2014年8月26日,所以本周是从2014年8月24日(周日) 2014年8月30日(星期六)

1 个答案:

答案 0 :(得分:3)

您可以使用EntityFunctions中的方法执行日期和时间算术。因此,您应该通过计算开始日期和结束日期来开始,然后在必要时使用TruncateTime将您创建的日期截断为日期(而不是日期和时间),并使用{{1计算出“从那个时期开始以来的天数”。然后除以7除以组......

DiffDays

虽然我希望能够发挥作用,但我本人并没有亲自在EF中完成任何日期/时间工作。一般方法应该没问题,只是你可能需要调整它。另请注意,此不会为您提供几周内没有任何条目的结果 - 在EF之外可能最容易做到。

编辑:如果求和部分不起作用,则很容易在本地进行求和:

DateTime today = DateTime.Today;
DateTime start = today.AddDays(-(int) today.DayOfWeek) // Sunday...
                      .AddDays(-28);                   // 4 weeks ago
DateTime end = start.AddDays(7 * 5);

var result = from entry in db.Entries
             where entry.Created >= start && entry.Created < end
             group entry.Amount by EntityFunctions.DiffDays(start, 
                 EntityFunctions.TruncateTime(entry.Created)) / 7 into g
             select new { Week = g.Key + 1, Sum = g.Sum() };