如何显示按产品类型和月份分组的产品计数?

时间:2018-08-27 16:01:35

标签: c# linq

我有一个包含4列的表,例如ProductName,ProductType,ProductProductionStartDate,ProductProductionCompleteDate。

我需要做的是显示每种产品类型在12个月内的产品数量。

我该怎么做?

我的下面是我的代码:

var model = context.Projects
    .Where(p => (p.ProductProductionStartDate > sdt && p.ProductProductionStartDate <= edt) && (p.ProductProductionCompleteDate != null))
    .GroupBy(p => new
    {
        Month = p.ProductProductionStartDate.HasValue ? p.ProductProductionStartDate.Value.Month : 0,
        Year = p.ProductProductionStartDate.HasValue ? p.ProductProductionStartDate.Value.Year : 0,
        productType = p.ProductType
    })
   .Select(g => new Dashmain
   {
       ProductType = g.Key.StoreType,
       Month = g.Key.Month,
       Year = g.Key.Year,
       Total = g.Count()
   })
   .OrderByDescending(a => a.Year)
   .ThenBy(a => a.Month)
   .ToList();

this is how I want to display the result

1 个答案:

答案 0 :(得分:2)

  

我想以这种方式显示数据{[Feb, 10,20,5], [March,10,20,5]}

您需要将GroupBy嵌套在类型上,像这样:

var model = context.Projects
    .Where(p => (p.ProductProductionStartDate > sdt && p.ProductProductionStartDate <= edt) && (p.ProductProductionCompleteDate != null))
    .GroupBy(p => new
    {
        Month = p.ProductProductionStartDate.HasValue ? p.ProductProductionStartDate.Value.Month : 0,
        Year = p.ProductProductionStartDate.HasValue ? p.ProductProductionStartDate.Value.Year : 0
    })
   .Select(g => new Dashmain
   {
       Month = g.Key.Month,
       Year = g.Key.Year,
       Totals = g.GroupBy(gg => gg.StoreType).OrderBy(gg => gg.Key).Select(gg => gg.Count()).ToList()
   })
   .OrderByDescending(a => a.Year)
   .ThenBy(a => a.Month)
   .ToList();

请注意,此方法有一个局限性:某个类别的产品为零的月份将完全没有数据。要解决此问题,您可以构建一个辅助方法,为缺少类型的乘积添加零。