1

私の構造はかなり単純です。
各 Customer にはWeeklyOrderがあります。
WeeklyOrderは 5 つのDailyOrderで構成され
、各DailyOrderにはItemType (基本的には 5 つのスロットの 1 つ) とCountを持つ5 つのOrderItemがあります。

今週のカウントを取得したい。したがって、すべてのユーザーから今週のすべての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
  • アイテム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; }
}
4

1 に答える 1

2

これを試して:

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)
    });
于 2013-09-23T03:24:03.470 に答える