.NET Framework 3.5中新增了Linq,让我们在操作泛型数据类型时方便快捷了很多,比如Concat,GroupBy,GroupJoin,Select等等。今天这篇文章要给大家分享的是.NET中使用Linq的GroupBy将泛型集合List<T>按某个属性分组并进行Sum的统计操作。例如有如下的泛型集合:
ID Name Value
1 N1 5
2 N2 2
3 N3 6
4 N2 15
5 N1 20
6 N6 3
7 N5 8
我们需要使用Linq的GroupBy按Name分组后统计每个Name分组的Value的和,统计结果形如:
Name Category
N1 25
N2 17
N3 6
N6 3
N5 8
思考一下,不用.NET(C#)的Linq你会怎么来实现这个分组并统计的这个实例场景?以下是使用.NET(C#)的Linq来实现按Name分组并统计的实例代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LinqGroupByDemo
{
class Program
{
static void Main(string[] args)
{
var lst = new List<Stat> {
new Stat{Id=1,Name="N1",Value=5},
new Stat{Id=2,Name="N2",Value=2},
new Stat{Id=3,Name="N3",Value=6},
new Stat{Id=4,Name="N2",Value=15},
new Stat{Id=5,Name="N1",Value=20},
new Stat{Id=6,Name="N6",Value=3},
new Stat{Id=7,Name="N5",Value=8},
};
var g = lst.GroupBy(x => x.Name);
var results = g.Select(x => new
{
Key = x.Key,
Name = x.First().Name,
Count = x.Sum(s => s.Value)
});
foreach (var item in results)
{
Console.WriteLine("Key:{0},Name:{1},Count:{2}", item.Key, item.Name, item.Count);
}
Console.ReadKey();
}
}
class Stat
{
public int Id { get; set; }
public string Name { get; set; }
public int Value { get; set; }
}
}
运行结果如图:
版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。
发表评论
登录用户才能发表评论, 请 登 录 或者 注册