.NET(C#)使用Linq GroupBy将泛型集合List<T>按某个属性分组后进行Sum等数据统计

C#开发 2015-10-09 1035浏览 收藏本文

.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; }
  }
}
运行结果如图: linq-group-by-demo

转载请注明:图享网 » .NET(C#)使用Linq GroupBy将泛型集合List<T>按某个属性分组后进行Sum等数据统计