简体   繁体   English

Linq复杂对象组

[英]Linq complex object groupBy

I have fairly simple structure: 我的结构很简单:
Each Customer has his WeeklyOrder . 每个客户都有他的WeeklyOrder
WeeklyOrder consists of 5 DailyOrders and WeeklyOrder由5个DailyOrders
in each DailyOrder are 5 OrderItems with ItemType (one of 5 slots basically) and Count . 每个DailyOrder中的5个OrderItems具有ItemType (基本上是5个广告位之一)和Count

I want to get counts for this week. 我想得到这个星期的计数。 So I get all DailyOrders from all users for this week. 因此,我本周从所有用户那里获得了所有DailyOrders

var orders = db
    .WeeklyOrders
    .Where(x => x.WeekNumber == week && x.Year == year)
    .SelectMany(x => x.DailyOrders);

Everything works fine, but now i don't know how to group daily orders by DailyOrder.DayNumber and how to group items in each DailyOrder (not all together, for each daily order separately) so i know the sum from all users - how many items of type 1 were ordered for Monday how many for Tuesday etc. 一切正常,但现在我不知道如何按DailyOrder.DayNumber对每日订单进行分组,以及如何对每个DailyOrder中的项目进行分组(不是全部在一起,分别针对每个每日订单),所以我知道所有用户的总和-多少类型1的项目在星期一订购了多少,在星期二订购了多少,等等。

I am asking only for the correct linq query. 我只要求正确的linq查询。

To give you and idea of what I want to get in my view: 让您了解我想获得的观点:

Monday 星期一

  • Item1: x1 物品1:x1
  • Item2: y1 第2项:y1
  • Item3: z1 第3项:z1
  • Item4: u1 第4项:u1
  • Item5: v1 项目5:v1

Tuesday 星期二

  • Item1: x2 项目1:x2
  • Item2: y2 第2项:y2
  • Item3: z2 Item3:z2
  • Item4: u2 第4项:u2
  • Item5: v2 项目5:v2

... ...
etc. 等等

Here is my model: 这是我的模型:

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; }
}

Try this: 尝试这个:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM