You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在VB.NET中对DataTable指定数据求和并保存至新表

在VB.NET中对DataTable按日期分组并筛选特定Type求和

嗨,这个需求用LINQ to DataSet就能轻松解决,代码简洁还容易维护。我给你一步步拆解实现过程:

步骤1:准备目标Type列表

先把需要求和的Type列值存到一个列表里,后续要修改的话直接改这个列表就行,不用到处找代码:

Dim targetTypes As New List(Of String) From {"value80", "value71", "value63"}

步骤2:用LINQ完成分组求和

假设你的原始DataTable名叫originalDt,我们先筛选出符合Type条件的行,再按日期分组,最后计算每组的Value总和:

' 从原始DataTable中筛选并分组求和
Dim groupedResult = From row In originalDt.AsEnumerable()
                    ' 只保留Type在目标列表中的行
                    Where targetTypes.Contains(row.Field(Of String)("type"))
                    ' 按Date列分组,dateKey是分组的键值
                    Group row By dateKey = row.Field(Of Date)("Date") Into Group
                    ' 生成包含日期和求和结果的匿名对象
                    Select New With {
                        .GroupDate = dateKey,
                        .TotalValue = Group.Sum(Function(r) r.Field(Of Decimal)("value"))
                    }

注意:这里的value列类型我用了Decimal,如果你的原始数据是整数(Integer)或者其他数值类型,记得对应修改,比如r.Field(Of Integer)("value")。如果value列可能存在空值,建议用可空类型处理:r.Field(Of Decimal?)("value").GetValueOrDefault(0),避免空值引发异常。

步骤3:将结果存入新的DataTable

接下来我们创建一个新的DataTable来存储最终结果,并把LINQ的查询结果填充进去:

' 创建结果DataTable,定义列结构
Dim resultDt As New DataTable()
resultDt.Columns.Add("Date", GetType(Date))
resultDt.Columns.Add("value_sum", GetType(Decimal)) ' 类型要和上面的TotalValue一致

' 遍历LINQ结果,逐行添加到新DataTable
For Each item In groupedResult
    resultDt.Rows.Add(item.GroupDate, item.TotalValue)
Next

最后一步:使用结果

现在resultDt就是你想要的最终数据啦,你可以直接把它绑定到DataGridView展示,或者保存到数据库/文件里:

' 绑定到DataGridView的示例
DataGridView1.DataSource = resultDt

如果你的Date列在原始DataTable里是字符串类型,记得在分组的时候先转换成Date类型,比如:

Group row By dateKey = Date.Parse(row.Field(Of String)("Date")) Into Group

不过更建议在导入数据的时候就把Date列设置为Date类型,避免日期格式不匹配的问题。

内容的提问来源于stack exchange,提问作者jonas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 13:52:27