[英]Linq complex object groupBy
我的结构很简单:
每个客户都有他的WeeklyOrder 。
WeeklyOrder由5个DailyOrders和
每个DailyOrder中的5个OrderItems具有ItemType (基本上是5个广告位之一)和Count 。
我想得到这个星期的计数。 因此,我本周从所有用户那里获得了所有DailyOrders 。
var orders = db
.WeeklyOrders
.Where(x => x.WeekNumber == week && x.Year == year)
.SelectMany(x => x.DailyOrders);
一切正常,但现在我不知道如何按DailyOrder.DayNumber对每日订单进行分组,以及如何对每个DailyOrder中的项目进行分组(不是全部在一起,分别针对每个每日订单),所以我知道所有用户的总和-多少类型1的项目在星期一订购了多少,在星期二订购了多少,等等。
我只要求正确的linq查询。
让您了解我想获得的观点:
星期一
星期二
...
等等
这是我的模型:
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)
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.