Sum/Count列数据Datatable c#控制台应用程序

本文关键字:控制台 应用程序 Datatable 数据 Count Sum | 更新日期: 2023-09-27 18:11:40

连接ODBC并填充数据表。根据标识类型,INVOICE是+或负数。我需要对第二列,每个标识符求和。我目前使用列标识符分组,但它是一个计数,因此不考虑+或-。简单地说,它计算每一步。

下面是一个例子。

标识符——|发票

1A557--------| 1 -----------|

2B123--------| 1 -----------|

1A557--------| -1 -----------|

1A557--------| 1 -----------|

2B123--------| 1 -----------|

9C437--------| 1 -----------|

我想看的是摘要。这是以上操作的结果

1A557--------| 1 -----------|

2B123--------| 2 -----------|

9C437--------| 1 -----------|

这是我目前使用的代码,它没有完成这项工作。

var accountGroups = completeDT_units.AsEnumerable()
                    .GroupBy(row => row.Field<String>("IDENTIFIER"))
                    .Select(grp => new 
                     { 
                          Account = grp.Key, 
                          Count = grp.Count() 
                     });

运行后,我需要查看摘要计数。我之前已经用下面的代码复制到另一个数据表。

var tblAccCounts = new DataTable(); tblAccCounts.Columns.Add("IDENTIFIER"); tblAccCounts.Columns.Add("Totals"); //, typeof(int) foreach (var grp in accountGroups) tblAccCounts.Rows.Add(grp.Account, grp.Count);

Sum/Count列数据Datatable c#控制台应用程序

您应该使用grp。Sum而不是grp.Count。比如:

var accountGroups = completeDT_units.AsEnumerable()
                    .GroupBy(row => row.Field<String>("IDENTIFIER"))
                    .Select(grp => new 
                     { 
                          Account = grp.Key, 
                          Count = grp.Sum(row=>row.Field<int>("INVOICE")) 
                     });

试试这个:

var accountGroups = completeDT_units.AsEnumerable()
                .GroupBy(row => row.Field<String>("IDENTIFIER"))
                .Select(grp => new 
                 { 
                      Account = grp.Key, 
                      Count = grp.Sum(r => r.Field<int>("INVOICE"))
                 });