类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
一条话就是:先分组,再到分组中求和,再从分组当中随机选一条记录

解决方案 »

  1.   

    var p= from c in db.StudentInfo
    group r by r.Name into g
    select new
     {
       Name = g.Key,
       Amount   = (from x in g
         select x.Amount).Sum() 
      }
     orderby c.Amount descending 
     select c
      

  2.   

     List<A> a = new List<A>{
               new A{ ParentID=1, Name="zj", Amout=10 },
               new A{ ParentID=1, Name="cc", Amout=20 },
               new A{ ParentID=3, Name="zm", Amout=30 },
               new A{ ParentID=4, Name="bb", Amout=40 },
               new A{ ParentID=3, Name="dd", Amout=50 },
               new A{ ParentID=5, Name="kk", Amout=60 }
           };        var p = from list in a
                    group list by new { list.ParentID, list.Name } into g
                    select new
                     {
                         ParentID = g.Key.ParentID,
                         Name = g.Key.Name,
                         Amount = (from x in g select x.Amout).Sum()
                     };
            
            foreach (var result in p)
            {
                Response.Write(result.ParentID + ", " + result.Name + ", " + result.Amount + "<br/>");
            }
      

  3.   

     如何先根据ParentID 分组求Amount 和, 再如果存在ParentID 相同的记录. 则随机选其中一条. 大家请注意。 如果存在ParentID 相同的记录. 则随机选其中一条. 不是简单的是分组。麻烦大家看清楚