实体框架逐日分组

时间:2019-01-15 17:19:12

标签: c# linq entity-framework-6

我正试图从每个月的16号到下个月的15号进行分组。

是否可以使用Entity Framework或linq?

var result = await db.Orders.Where(o => o.OrderDate > date)
                            .GroupBy(...)
                            .ToListAsync();

1 个答案:

答案 0 :(得分:1)

要使此功能与EF和SQL一起使用,您只需执行一些日期数学运算即可计算出用于分组的“期间”数字。基本上,您可以将每个日期转换为月份,并以16号为偏移量,然后加上年份的偏移量:

var result = await db.Orders.Where(o => o.OrderDate > date)
                            .GroupBy(o => o.OrderDate.Month + 12*(o.OrderDate.Year - date.Year) - (o.OrderDate.Day >= 16 ? 0 : 1))
                            .ToListAsync();

按@stuartd,这是如何找回每组的时间段:

var resultp = result.Select(r => new {
                  PeriodBegin = new DateTime(date.Year + r.Key / 12 - (r.Key % 12 == 0 ? 1 : 0), r.Key % 12 == 0 ? 12 : r.key % 12, 16),
                  PeriodEnd = new DateTime(date.Year + r.Key / 12, r.Key % 12 + 1, 15),
                  Orders = r.ToList()
              }).ToList();