datatable之groupby的使用方法

该博客展示了C#中如何使用LINQ进行数据表的分组和筛选,通过实例演示了按姓名和性别分组并计算得分总和,以及在Label18_Click事件中的类似操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       private void button1_Click(object sender, EventArgs e)
        {
            DataTable dt = new DataTable();
            dt.Columns.AddRange(new DataColumn[] { new DataColumn("name", typeof(string)),
                                         new DataColumn("sex", typeof(string)),
                                         new DataColumn("score", typeof(int)) });
            dt.Rows.Add(new object[] { "张三", "男", 1 });
            dt.Rows.Add(new object[] { "张三", "男", 4 });
            dt.Rows.Add(new object[] { "李四", "男", 100 });
            dt.Rows.Add(new object[] { "李四", "女", 90 });
            dt.Rows.Add(new object[] { "王五", "女", 77 });
            var query = from t in dt.AsEnumerable()
                        group t by new { t1 = t.Field<string>("name"), t2 = t.Field<string>("sex") } into m
                        where m.Count() >1 
                        select new
                        {
                            name = m.Key.t1,
                            sex = m.Key.t2,
                            score = m.Sum(n => n.Field<int>("score"))
                        };
           
            if (query.ToList().Count > 0)
            {
                query.ToList().ForEach(q =>
                {
                    MessageBox.Show(q.name + "," + q.sex + "," + q.score);
                });
            }
            dt.AsEnumerable().GroupBy(p => new { t1 = p.Field<string>("name"), t2 = p.Field<string>("sex") }).Where(p => p.Count() > 1)
                .Select(s => new { name = s.Key.t1, sex = s.Key.t2, score = s.Sum(ss => ss.Field<int>("score")) }).ToList()
                .ForEach(sss => {
                    MessageBox.Show(sss.name + "," + sss.sex + "," +sss.score);
                });
        }
    Private Sub Label18_Click(sender As Object, e As EventArgs) Handles Label18.Click
        Dim dt As New DataTable()
        dt.Columns.AddRange(New DataColumn() {New DataColumn("name", GetType(String)), New DataColumn("sex", GetType(String)), New DataColumn("score", GetType(Integer))})
        dt.Rows.Add(New Object() {"张三", "男", 1})
        dt.Rows.Add(New Object() {"张三", "男", 4})
        dt.Rows.Add(New Object() {"李四", "男", 100})
        dt.Rows.Add(New Object() {"李四", "女", 90})
        dt.Rows.Add(New Object() {"王五", "女", 77})
        dt.AsEnumerable().GroupBy(Function(p) New With {
        Key .t1 = p.Field(Of String)("name"),
        Key .t2 = p.Field(Of String)("sex")
    }).Where(Function(p) p.Count() > 1).[Select](Function(s) New With {
        Key .name = s.Key.t1,
        Key .sex = s.Key.t2,
        Key .score = s.Sum(Function(ss) ss.Field(Of Integer)("score"))
    }).ToList().ForEach(Function(sss)
                            MessageBox.Show(sss.name + "," + sss.sex + "," + sss.score.ToString)

                        End Function)



    End Sub

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zyfsky666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值