我正在嘗試從每個月的 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();
- 1 回答
- 0 關注
- 131 瀏覽
添加回答
舉報
0/150
提交
取消