【问题标题】:How to get the sum of multiple columns of a datatable in c#如何在c#中获取数据表的多列的总和
【发布时间】:2022-01-12 09:58:03
【问题描述】:

我想为 datatable 中的每个数据行获取仅三列的总和。我有一个大约 15 列的 DT,我只想要第 7 列、第 9 列和第 10 列的总和。所有列都是字符串类型。 我尝试了几种使用 LINQ 的方法,但都失败了。

【问题讨论】:

  • 所有列都是字符串,但您想对它们求和?它们实际上代表什么类型,double、decimal、int?
  • 您能否提供有关数据表外观、代码、...的更多详细信息?

标签: c# linq datatable


【解决方案1】:

如果所有列都是字符串但实际上代表浮点数:

double totalSum = dt.AsEnumerable()
    .Sum(r=> double.Parse(r[7].ToString()) + double.Parse(r[9].ToString()) + double.Parse(r[10].ToString()));

如果有些是空的或有无效的数字,你需要使用double.TryParse

【讨论】:

  • 感谢您的帮助。
【解决方案2】:

这是解决方案,即使列类型是字符串,它也对我有用:

for (int i = 11; i < dt.Rows.Count; i++)
{
    for (int j = 14; j <= 18; j += 2)
    {
        if (j > 17)
            j -= 1;
        if(!string.IsNullOrEmpty(dt.Rows[i][2].ToString()))
        { 
            newdt.Rows.Add(dt.Rows[i][18], dt.Rows[i][19], 
            dt.Rows[i][j]);
        } 
    }
}
    
try
{
    var result = 0;
    if (newdt.Rows.Count != 0)
    {                          
        result = newdt.AsEnumerable().Sum(x => Convert.ToInt32(x["Column7"]));
        subdt.Rows.Add(dt.Rows[i][18], dt.Rows[i][19], result) 
    }
...

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 1970-01-01
  • 2013-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多