2012-09-05 33 views
1

我有一个LINQ到对象质询LINQ到对象 - 总结GROUPBY算

我们正在制造的产品,并试图报告月lossCodes,由总lossCode排序。

所以源数据(如名单< myProduct的>我的产品)看起来像:

.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)...加上对'聚合'损失的排序(所以TooSmall cnt = 5,然后TooLarge cnt = 3,然后WrongColor 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; 

这段代码无疑是错误的(排序依据resultSet.NumLosses显然是不正确的)...但我不明白如何总结的分组计数能够做最后的排序。由于结果集的其他用途,我宁愿不尝试将“总计”记录嫁接到结果集上(并且对于匿名类型,我不确定如何完成)。任何人都经历过这样的事情?

Thx!

回答

1

我假定你想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) 
+0

订购(哎呀 - 是的,numLosses) 我不知道这让我正确的结果 - 如果我没有记错,这.OrderByDescending条款将对[Month,lossCode]分组的numLosses进行排序...我试图做的是对给定lossCode的集合numLosses进行排序,无论日期如何。呃 - 这个解释是否有意义? – ttt