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

本文转载自:http://www.cnblogs.com/han1982/p/4138163.html

示例1:

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

原表:

按姓名Nam 分组后结果:

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

代码:

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 g
                         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;
        }
    }
时间: 2024-11-05 20:29:01

(转)c# Linq及Lamda表达式应用经验之 GroupBy 分组的相关文章

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

本文转载自:http://www.cnblogs.com/han1982/p/4138163.html 示例1: GroupBy 分组在List<>泛型中的应用 原表: 按姓名Name 分组后结果: 对DATATABLE 进行LAMDA查询时必须在项目的引用中添加 System.Data.DataSetExtensions 代码: public partial class Form1 : Form { public Form1() { InitializeComponent(); } List

c# Linq及Lambda表达式应用经验之 GroupBy 分组 count ,排序

引用:http://www.cnblogs.com/han1982/p/4138163.html 示例1: GroupBy 分组在List<>泛型中的应用 原表: 按姓名Nam 分组后结果: 对DATATABLE 进行LAMDA查询时必须在项目的引用中添加 System.Data.DataSetExtensions public partial class Form1 : Form { public Form1() { InitializeComponent(); } List<Pers

linq和lamda表达式中添加时间判断时解决方案

在工作中遇到个问题,在使用lamda查询数据的时候,需要添加一个时间判断, DateTime.AddDays(3) > e.ExpirationDate 例如:list = Context.VoucherUserSignPLView.Where(e => e.IsUse == isUse && e.ExpirationDate >= DateTime.Now && DateTime.AddDays(days) > e.ExpirationDate).

C#学习记录(七)LINQ语句及LAMDA表达式

LINQ LINQ是一种集成在计算机语言里的信息查询语句,可以让编写者以代码的方式操作数据库. 在C#中,LINQ语句有两种写法. 这是第一种写法 IEnumerable<Customer> result = from customer in customers where customer.FirstName == "Donna“ select customer; 由于这种写法比较容易和SQL语言混淆,所以我更倾向于使用另一种写法 IEnumerable<Customer&g

C#DataTable 使用GroupBy方法的lamda 表达式和Linq语句写法

https://www.cnblogs.com/johnblogs/p/6006867.html DataTable ds = new DataTable(); //1.lamda 表达式写法(推荐) var result = ds.AsEnumerable().GroupBy(s => new{Year = s.Field<int>("Year"), Month = s.Field<int>("Month"), Day = s.Fie

LINQ的左连接、右连接、内连接和Lamda表达式实现Left join

1.左连接: var LeftJoin = from t1 in l1join t2 in l2on t1.ID equals t2.ID into Joinedt12from t3 in Joinedt12.DefaultIfEmpty()select new                        {Name = t1.Name,Age=t2.Age                      };   2.右连接: var RightJoin = from t2 in l2join t

[.net 面向对象程序设计进阶] (5) Lamda表达式(二) 表达式树快速入门

[.net 面向对象程序设计进阶] (6) Lamda表达式(二) 表达式树快速入门 本节导读: 认识表达式树(Expression Tree),学习使用Lambda创建表达式树,解析表达式树. 学习表达式在程序设计中的优点:比如构造动态查询.动态构造表达式树完成未知对象属性访问,比反射的性能高出很多.我们可以说表达式树才是Lambda的精髓,是我们必须要熟练掌握并灵活运用的. 1.关于表达式树(Expression Tree) 表达式树以树形数据结构表示代码,其中每一个节点都是一种表达式,比如

匿名方法与Lamda表达式

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 匿名方法与Lamda表达式 { class Program { static void Main(string[] args) { //任何可以使用委托的地方都可以使用匿名方法,匿名方法就是没有名字的方法. //a指向一个匿名方法 Action a

委托、泛型委托、多播委托 和 lamda表达式

委托基本概念:可以把一个方法作为一个参数传给另一个方法 声明:  方法前加 delegate  关键字 列子: using System; using System.Collections; using System.Collections.Generic; namespace Dome { class dom { static void Main(string[] args) { string[] sname = { "Abc", "dFg", "HjK