C# Linq到对象-按计数分组求和

C# Linq到对象-按计数分组求和,c#,linq,object,group-by,sql-order-by,C#,Linq,Object,Group By,Sql Order By,我有一个非常重要的问题 我们正在生产产品,并试图按月报告损失代码,按总损失代码排序 因此源数据(如列表myProducts)如下所示: .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 / T

我有一个非常重要的问题

我们正在生产产品,并试图按月报告损失代码,按总损失代码排序

因此源数据(如列表myProducts)如下所示:

.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
        |  TooSmall |  TooLarge | WrongColor
04-2102 |    4      |    2      |    0
05-2012 |    1      |    1      |    1
结果转换应如下所示:

.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
        |  TooSmall |  TooLarge | WrongColor
04-2102 |    4      |    2      |    0
05-2012 |    1      |    1      |    1
所以它是一组(月,lossCode)。。。加上一个“聚合”损失排序(所以Toosall cnt=5,然后TooLarge cnt=3,然后ErrorColor cnt=1是我试图获得的排序顺序)-但我在最终排序时遇到了问题

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显然不正确)。。。但我不知道如何将子组计数求和以进行最终排序。由于结果集的一些其他用途,我不想尝试将“totals”记录移植到结果集(对于匿名类型,我不确定该如何实现)。以前有人经历过类似的事情吗


谢谢

我假设您想按
NumLosses

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)

我想您想按
NumLosses

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)
(oops-是的,numLosses)我不确定这是否得到了正确的结果-如果我没有弄错的话,这个.OrderByDescending子句将对[Month,lossCode]分组的numLosses进行排序。。。我试图做的是对给定lossCode的聚合numloss进行排序,而不管日期。呃-这个解释有什么意义吗?(哦-是的,numLosses)我不确定这是否得到了正确的结果-如果我没有弄错的话,这个.OrderByDescending子句将对[Month,lossCode]分组的numLosses进行排序。。。我试图做的是对给定lossCode的聚合numloss进行排序,而不管日期。呃,这个解释有意义吗?