LINQ实现多次调用GroupBy进行分组统计

在回答论坛上的linq 分组求和的疑问 而写的,,特此记录下来,直接上代码

private void button2_Click(object sender, EventArgs e){List<Test> listTest = new List<Test>(){new Test{ Ming="A", Xingbie="N",Xuehao="BL1",Code="AFR",zhi=13},new Test{ Ming="A", Xingbie="N",Xuehao="BL1",Code="AFR",zhi=47},new Test{ Ming="A", Xingbie="N",Xuehao="BL1",Code="WSR",zhi=13},new Test{ Ming="A", Xingbie="N",Xuehao="BL1",Code="WSR",zhi=57},new Test{ Ming="A", Xingbie="N",Xuehao="BL2",Code="AFR",zhi=13},new Test{ Ming="O", Xingbie="Y",Xuehao="BL2",Code="AFR",zhi=13},};//方法1,最好var result1 = listTest.GroupBy(x => new { x.Ming, x.Xingbie, x.Xuehao }).SelectMany(x => x.GroupBy(a => a.Code)).Select(xx => new{zhi = xx.Sum(z => z.zhi),xx.First().Ming,xx.First().Xingbie,xx.First().Xuehao,xx.First().Code}).ToList();//方法2,其次var result2 = listTest.GroupBy(x => x.Code, (Code, ItemGroup) => new{GetResult = ItemGroup.GroupBy(s => new { s.Ming, s.Xingbie, s.Xuehao },(Item, resultGroup) => new{Item.Ming,Item.Xingbie,Item.Xuehao,Code,zhi = resultGroup.Sum(o => o.zhi)})}).ToList();foreach (var item in result2){foreach(var item1 in item.GetResult){MessageBox.Show(item1.ToString());}}//方法3,最次var result3 = listTest.GroupBy(s => new { s.Ming, s.Xingbie, s.Xuehao },(Item, ItemGroup) => new{GetResult =ItemGroup.GroupBy(s2 => s2.Code,(Code, GetResult) => new{Item.Ming,Item.Xingbie,Item.Xuehao,Code,zhi = GetResult.Sum(o => o.zhi)})}).ToList();}public class Test{public string Ming { get; set; }public string Xingbie { get; set; }public string Xuehao { get; set; }public string Code { get; set; }public int zhi { get; set; }}输出结果:

Ming="A",Xingbie="N",Xuehao="BL1",Code="AFR",zhi=60, Ming="A",Xingbie="N",Xuehao="BL1",Code="WSR",zhi=70, Ming="A",Xingbie="N",Xuehao="BL2",Code="AFR",zhi=13, Ming="O",Xingbie="Y",Xuehao="BL2",Code="AFR",zhi=13,

生命不息,在任何一种博大的辉煌之后,都掩藏着许多鲜为人知的艰难的奋斗。

LINQ实现多次调用GroupBy进行分组统计

相关文章:

你感兴趣的文章:

标签云: