为了账号安全,请及时绑定邮箱和手机立即绑定

实体框架按月按天分组

实体框架按月按天分组

C#
慕神8447489 2022-07-23 09:07:55
我正在尝试从每个月的 16 号到接下来的 15 号进行一次分组。Entity Framework 或 linq 可以吗?var result = await db.Orders.Where(o => o.OrderDate > date)                             .GroupBy(...)                             .ToListAsync();
查看完整描述

1 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

要使这项工作与 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();


查看完整回答
反对 回复 2022-07-23
  • 1 回答
  • 0 关注
  • 106 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信