Linq 复杂对象 groupBy
本文关键字:groupBy 对象 复杂 Linq | 更新日期: 2023-09-27 18:32:26
我的结构相当简单:
每个客户都有自己的每周订单。
每周订单包括 5 个每日订单和
在每个每日订单中,有 5 个订单项,带有项目类型(基本上是 5 个插槽之一)和计数。
我想得到本周的计数。所以我从所有用户那里获得了本周的所有每日订单。
var orders = db
.WeeklyOrders
.Where(x => x.WeekNumber == week && x.Year == year)
.SelectMany(x => x.DailyOrders);
一切正常,但现在我不知道如何按 DailyOrder.DayNumber 对每日订单进行分组以及如何对每个 DailyOrder 中的项目进行分组(不是全部分组,分别为每个每日订单),所以我知道所有用户的总和 - 周一订购了多少类型 1 的项目,周二订购了多少等。
我只要求正确的 linq 查询。
为了给你和我想要得到什么的想法:
星期一
- 项目1: x1
- 项目2: y1
- 项目3:z1
- 项目4: u1
- 项目5: v1
星期二
- 项目1: x2
- 项目2:y2
- 项目3:z2
- 项目4:u2
- 项目5:v2
。
等。
这是我的模型:
public class WeeklyOrder
{
public int WeeklyOrderId { get; set; }
public int UserId { get; set; }
public int Year { get; set; }
public int WeekNumber { get; set; }
public virtual Customer Customer { get; set; }
public virtual List<DailyOrder> DailyOrders { get; set; }
}
public class DailyOrder
{
public int DailyOrderId { get; set; }
public int DayNumber { get; set; }
public int WeeklyOrderId { get; set; }
public virtual WeeklyOrder WeeklyOrder { get; set; }
public virtual List<OrderItem> OrderItems { get; set; }
}
public class OrderItem
{
public int OrderItemId { get; set; }
public int Count { get; set; }
public int ItemTypeId { get; set; }
public int DailyOrderId { get; set; }
public virtual DailyOrder DailyOrder { get; set; }
public virtual ItemType Type { get; set; }
}
试试这个:
var orders = db
.WeeklyOrders
.Where(x => x.WeekNumber == week && x.Year == year)
.SelectMany(x => x.DailyOrders.SelectMany(y => y.OrderItems))
.GroupBy(a => new
{
DayNumber = a.DailyOrder.DayNumber,
Type = a.Type
})
.Select(a => new
{
DayNumber = a.Key.DayNumber,
Type = a.Key.Type,
Total = a.Sum(b => b.Count)
});