【问题标题】:Linq complex object groupByLinq 复杂对象 groupBy
【发布时间】:2013-09-21 16:27:56
【问题描述】:

我的结构相当简单:
每个客户都有自己的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
  • 项目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; }
}

【问题讨论】:

  • 我觉得你需要orders.GroupBy(x=&gt; x.DayNumber);
  • @SriramSakthivel 我可以做到,但后来我得到了 DailyOrders 组,我还需要对项目进行分组并汇总计数。

标签: c# linq asp.net-mvc-4


【解决方案1】:

试试这个:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-09
    • 2019-02-06
    • 2021-03-24
    • 1970-01-01
    相关资源
    最近更新 更多