none
LINQ的分组问题 RRS feed

  • 问题

  • 类A ParentID    Name    Amount  
              1                zj          10  
              1               cc          20  
                3               zm         30  
                 4               bb         40  
                3              dd          50  
                5              kk          60

    这 样的一个List<A> , 如何先根据ParentID 分组求Amount 和, 再如果存在ParentID 相同的记录. 则随机选其

    中一条. 需要结果如下:

      1 zj 30 
      3 zm 80
     4 bb 40
     5 kk 60
    一条话就是:先分组,再到分组中求和,再从分组当中随机选一条记录
    学习者
    2010年4月13日 9:21

答案

  •             var newList = cList.GroupBy(p => p.ParentID).
                    Select(p => new { OneItem = p.FirstOrDefault(), Sum = p.Sum(g => g.Amount) }).
                    Select(p => new A() { ParentID = p.OneItem.ParentID, Name = p.OneItem.Name, Amount = p.Sum }).ToList();

     

    其中:如果想要“随机”选取,把FirstOrDefault换成个自定义的方法。

    • 已标记为答案 Mog Liang 2010年4月20日 6:49
    2010年4月19日 19:35

全部回复

  • 没人回答。。。  汗个。。  
    学习者
    2010年4月15日 9:39
  •             var newList = cList.GroupBy(p => p.ParentID).
                    Select(p => new { OneItem = p.FirstOrDefault(), Sum = p.Sum(g => g.Amount) }).
                    Select(p => new A() { ParentID = p.OneItem.ParentID, Name = p.OneItem.Name, Amount = p.Sum }).ToList();

     

    其中:如果想要“随机”选取,把FirstOrDefault换成个自定义的方法。

    • 已标记为答案 Mog Liang 2010年4月20日 6:49
    2010年4月19日 19:35