C# linq对dataTable group分组求和

查询出来的表dtSumNaturalWorkHour,根据PersonName,ProjectName对WorkHour求和。

var query = dtSumNaturalWorkHour.AsEnumerable().GroupBy(d => new { PersonName = d.Field<string>("PersonName"), ProjectName = d.Field<string>("ProjectName")  
                   })  
              .Select(g => new  
              {  
                  PersonName = g.Key.PersonName,  
                  ProjectName = g.Key.ProjectName,  
                  num = g.Sum(d => Convert.ToDouble(d["WorkHour"])),  
              });  

只根据一列值group 的查询求和:根据PersonName对WorkHour求和.

var dt=  dtSumNaturalWorkHour.Rows.Cast<DataRow>().GroupBy<DataRow, string>(row => Convert.ToString(row["PersonName"])).  
                   Select(group => new { group.Key, Value = group.Sum(x => Convert.ToDouble(x["WorkHour"])) });  

PS

                var result = dtExecItem.Rows.Cast<DataRow>().
                    GroupBy<DataRow, string>(row => Convert.ToString(row["StatID"])).
                    Select(group => new
                    {
                        group.Key,
                        SumValue = group.Sum(x => Convert.ToDouble(x["Price"]))
                    });






                foreach (var stat in result)
                {
                    DataRow dr = dtPromClass.NewRow();
                    dr["ClassTypeID"] = stat.Key;
                    dr["ClassAmount"] = stat.SumValue;
                    dr["PromAmount"] = 0;
                    dtPromClass.Rows.Add(dr);
                }

### 使用 C# DataTable 进行列表数据统计 在 C# 中,`DataTable` 是一种非常灵活的数据结构,可以用来存储和操作表格形式的数据。为了实现对 `DataTable` 的统计数据处理,通常会结合 LINQ 查询来完成复杂的计算任务。 以下是基于所提供的引用内容以及专业知识的回答: #### 创建并初始化 DataTable 可以通过创建一个新的 `DataTable` 并定义其列来进行初始设置。例如: ```csharp // 初始化 DataTable DataTable tgi = new DataTable(); tgi.Columns.Add("类型", typeof(int)); tgi.Columns.Add("商品编码(sku)", typeof(string)); tgi.Columns.Add("零售单价", typeof(double)); ``` 此部分代码用于定义表的结构及其各字段的数据类型[^1]。 #### 向 DataTable 添加行 通过调用 `Rows.Add()` 方法向 `DataTable` 插入新记录。例如: ```csharp tgi.Rows.Add(1, "SKU001", 99.9); tgi.Rows.Add(2, "SKU002", 78.5); tgi.Rows.Add(1, "SKU003", 45.6); ``` 上述代码片段展示了如何向已有的 `DataTable` 表格中添加具体数据项。 #### 利用 LINQDataTable 数据进行统计分析 LINQ 提供了一种强大的方式查询和转换集合中的数据,包括来自 `DataTable` 的数据。下面是一个简单的例子展示如何按某一特定条件聚合数据,并将其重新写回到新的 `DataTable` 中。 假设我们需要按照 “类型” 字段分组并对每组内的 “零售单价” 计算总和,则可执行如下操作: ```csharp var result = from row in tgi.AsEnumerable() group row by row.Field<int>("类型") into g select new { 类型 = g.Key, 总价 = g.Sum(r => r.Field<double>("零售单价")) }; // 将结果存回另一个 DataTable DataTable summaryTable = new DataTable(); summaryTable.Columns.Add("类型", typeof(int)); summaryTable.Columns.Add("总价", typeof(double)); foreach (var item in result) { summaryTable.Rows.Add(item.类型, item.总价); } ``` 这里利用了 LINQ 来对原始 `DataTable` 实施分组求和逻辑[^2]。最终的结果被保存到名为 `summaryTable` 的新表里以便进一步使用或者显示给用户查看。 #### 完整示例程序 综合以上各个步骤,完整的演示代码可能看起来像这样: ```csharp using System; using System.Data; using System.Linq; class Program { static void Main() { // Step 1: Create and initialize the DataTable. DataTable tgi = new DataTable(); tgi.Columns.Add("类型", typeof(int)); tgi.Columns.Add("商品编码(sku)", typeof(string)); tgi.Columns.Add("零售单价", typeof(double)); // Step 2: Add rows to the table. tgi.Rows.Add(1, "SKU001", 99.9); tgi.Rows.Add(2, "SKU002", 78.5); tgi.Rows.Add(1, "SKU003", 45.6); // Step 3: Use LINQ to perform statistical analysis on data within the DataTable. var results = from row in tgi.AsEnumerable() group row by row.Field<int>("类型") into g select new { Type = g.Key, TotalPrice = g.Sum(r => r.Field<double>("零售单价")) }; // Step 4: Store processed information back into another DataTable. DataTable summaryTable = new DataTable(); summaryTable.Columns.Add("类型", typeof(int)); summaryTable.Columns.Add("总价", typeof(double)); foreach(var res in results){ summaryTable.Rows.Add(res.Type, res.TotalPrice); } Console.WriteLine(summaryTable.ToString()); } } ``` 这段代码实现了从构建基础数据集到最后生成汇总报表的整体流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值