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