我在数据库中的收入表中有金额字段,以及在同一个表中创建的日期。我需要像
这样的数据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日(星期六)
答案 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() };