簡體   English   中英

Linq復雜對象組

[英]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查詢。

讓您了解我想獲得的觀點:

星期一

  • 物品1:x1
  • 第2項:y1
  • 第3項:z1
  • 第4項:u1
  • 項目5:v1

星期二

  • 項目1:x2
  • 第2項:y2
  • Item3: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)
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM