关于c#:Linq to Objects – Summing groupby count

Linq to Objects - Summing groupby count

我有一个关于物体的问题

我们正在生产产品,并试图按月报告损失,按总损失分类。

因此源数据(如listmyproducts)如下所示:

1
2
3
4
5
6
7
8
9
10
.lossDate / .lossCode
4/10/2012 / TooLarge
4/11/2012 / TooSmall
4/14/2012 / TooSmall
4/14/2012 / TooSmall
4/14/2012 / TooSmall
5/1/2012  / TooLarge
5/10/2012 / TooSmall
4/10/2012 / TooLarge
5/10/2012 / WrongColor

结果转换应该如下所示:

1
2
3
        |  TooSmall |  TooLarge | WrongColor
04-2102 |    4      |    2      |    0
05-2012 |    1      |    1      |    1

所以这是一个分组(月,losscode)加上对"聚合"损失的排序(所以toosmall cnt=5,toolarge cnt=3,wrong color cnt=1是我试图得到的排序顺序),但我对最终排序有问题。

1
2
3
4
5
6
7
8
9
10
11
query = from prod in myProducts
  group prod by new {Month = prod.lossDate.ToString("yyyy-MM"), prod.lossCode} into g
  select new
  {
     g.Key.Month,                  
     ReasonCode = g.Key.lossCode,
     NumLosses = g.Count()
  }
  into resultSet
  orderby resultSet.NumLosses descending
  select resultSet;

此代码无疑是错误的(orderby resultset.numLosses显然不正确)…但我不知道如何对子组计数求和才能进行最终排序。由于结果集的一些其他用途,我不想尝试将"总计"记录移植到结果集(对于匿名类型,我不确定如何进行)。以前有人经历过这样的事吗?

谢谢!


我想您想由NumLosses订购

1
2
3
4
5
6
7
8
9
query = (from prod in myProducts
  group prod by new {Month = prod.lossDate.ToString("yyyy-MM"), prod.lossCode} into g
  select new
  {
     g.Key.Month,                  
     ReasonCode = g.Key.lossCode,
     NumLosses = g.Count()
  }
).OrderByDescending(x => c.NumLosses)