datatable之groupby的使用方法

       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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
DataTableC#中用于表示内存中的数据表的类。它类似于数据库中的表,可以存储和操作数据。而"from"和"group by"是LINQ查询语句中的关键字,用于从数据源中筛选和分组数据。 在C#中,可以使用LINQ查询语句从DataTable中进行筛选和分组操作。下面是一个示例代码,演示了如何使用LINQ查询语句从DataTable中进行分组操作: ```csharp // 假设有一个名为"myTable"的DataTable对象 DataTable myTable = new DataTable(); // 添加列 myTable.Columns.Add("Name", typeof(string)); myTable.Columns.Add("Age", typeof(int)); // 添加数据 myTable.Rows.Add("John", 25); myTable.Rows.Add("Mary", 30); myTable.Rows.Add("John", 35); myTable.Rows.Add("Mary", 28); // 使用LINQ查询语句进行分组操作 var query = from row in myTable.AsEnumerable() group row by row.Field<string>("Name") into grp select new { Name = grp.Key, Count = grp.Count(), AverageAge = grp.Average(row => row.Field<int>("Age")) }; // 遍历查询结果 foreach (var result in query) { Console.WriteLine($"Name: {result.Name}, Count: {result.Count}, Average Age: {result.AverageAge}"); } ``` 在上面的示例代码中,首先创建了一个名为"myTable"的DataTable对象,并添加了两列(Name和Age)以及一些数据。然后使用LINQ查询语句对数据进行分组操作,按照"Name"列进行分组,并计算每个分组的行数和平均年龄。最后,遍历查询结果并输出。 需要注意的是,使用LINQ查询语句对DataTable进行操作需要先将DataTable转换为可查询的数据源,可以使用`myTable.AsEnumerable()`方法DataTable转换为可查询的数据源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zyfsky666

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

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

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

打赏作者

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

抵扣说明:

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

余额充值