随笔 - 432  文章 - 0  评论 - 15  阅读 - 63万

c# Linq及Lamda表达式应用经验之 GroupBy 分组

示例1:

GroupBy 分组在List<>泛型中的应用

原表:

按姓名Nam 分组后结果:

对DATATABLE 进行LAMDA查询时必须在项目的引用中添加 System.Data.DataSetExtensions 

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
public partial class Form1 : Form 
    public Form1() 
    
        InitializeComponent(); 
    
   
    List<Person> persons1 = new List<Person>(); 
   
    private void Form1_Load(object sender, EventArgs e) 
    
        initForm(); 
    
    private void initForm() 
    {//窗体初始化 
   
        persons1.Add(new Person("张三", "男", 20, 1500)); 
        persons1.Add(new Person("王成", "男", 32, 3200)); 
        persons1.Add(new Person("李丽", "女", 19, 1700)); 
        persons1.Add(new Person("何英", "女", 35, 3600)); 
        persons1.Add(new Person("何英", "女", 18, 1600)); 
        dataGridView1.DataSource = persons1; 
   
    
   
    private void button1_Click(object sender, EventArgs e) 
    
        //******* 对集合按Name属于进行分组GroupBy查询 ******** 
        //结果中包括的字段: 
        //1、分组的关键字:Name = g.Key 
        //2、每个分组的数量:count = g.Count() 
        //3、每个分组的年龄总和:ageC = g.Sum(item => item.Age) 
        //4、每个分组的收入总和:moneyC = g.Sum(item => item.Money) 
   
        //写法1:lamda 表达式写法(推荐) 
        var ls = persons1.GroupBy(a => a.Name).Select(g => (new { name = g.Key, count = g.Count(), ageC = g.Sum(item => item.Age), moneyC = g.Sum(item => item.Money) })); 
        //写法2:类SQL语言写法 最终编译器会把它转化为lamda表达式 
        var ls2 = from ps in persons1 
                 group ps by ps.Name 
                     into
                     select new { name = g.Key, count = g.Count(), ageC = g.Sum(item => item.Age), moneyC = g.Sum(item => item.Money) }; 
   
        dataGridView1.DataSource = ls.ToList(); 
       //dataGridView1.DataSource = ls2.ToList(); 
    
   
/// <summary> 
/// 手动设计一个Person类。用于放到List泛型中 
/// </summary> 
public class Person 
    public string Name { get; set; } 
    public int Age  { get;private set; } 
    public string Sex { get; set; } 
    public int Money { get; set; } 
   
    public Person(string name, string sex, int age, int money) 
    
        Name = name; 
        Age = age; 
        Sex = sex; 
        Money = money; 
    
}

  

posted on   狼来了  阅读(393)  评论(0编辑  收藏  举报
编辑推荐:
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

点击右上角即可分享
微信分享提示