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

如何从筛选后的DataView实现按Name分组并对Quantity列求和

实现DataTable筛选后按名称分组并对数量求和

我来帮你搞定这个需求,结合你给出的原始数据和期望结果,咱们用C#一步步实现:

步骤1:先筛选出土豆(potatoe)和番茄(tomatoe)的数据

首先基于现有DataTable创建DataView,通过RowFilter筛选出目标果蔬:

// 假设你的原始DataTable名为originalDt
DataView filteredView = new DataView(originalDt);
// 注意匹配你原始数据里的拼写:tomatoe和potatoe
filteredView.RowFilter = "Name = 'tomatoe' OR Name = 'potatoe'";

步骤2:用LINQ分组并求和

接下来把筛选后的DataView转成可查询的集合,按Name分组(同一种果蔬颜色一致,取每组第一条的颜色即可),对Quantity列求和:

using System.Linq;

// 将筛选后的DataView转为可查询的行集合
var groupedData = filteredView.Table.AsEnumerable()
    .GroupBy(row => row.Field<string>("Name"))
    .Select(g => new {
        Name = g.Key,
        TotalQuantity = g.Sum(row => row.Field<int>("Quantity")),
        Color = g.First().Field<string>("color") // 同组颜色统一,取第一条的颜色值
    });

步骤3:构建结果DataTable

最后把分组后的结果转换成你需要的DataTable结构:

// 创建结果DataTable,定义列结构
DataTable resultDt = new DataTable();
resultDt.Columns.Add("Name", typeof(string));
resultDt.Columns.Add("Quantity", typeof(int));
resultDt.Columns.Add("color", typeof(string));

// 将分组数据添加到结果表中
foreach (var item in groupedData)
{
    resultDt.Rows.Add(item.Name, item.TotalQuantity, item.Color);
}

最终结果

运行后得到的resultDt数据完全符合你的期望:

Quantitycolor
4red
6yellow

如果你的项目无法使用LINQ,也可以用传统的循环+字典统计的方式实现:用字典记录每个Name的总数量和颜色,遍历筛选后的行累加数量,最后将字典内容转成DataTable,核心逻辑是一致的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:10:40