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);
您应该使用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"))
});