如何在列C#中仅添加数字

问题描述 投票:-1回答:4

我想在C#中获得DataTable列的总和。但是,我的列包含字符串和数值。有没有办法只总结列中的数值?

数据表

Column

hello
304
-312
213
bye

我尝试使用下面的代码,但当单元格不是数值时,它将无法工作。

var total = dt.Compute("Sum(column)","");
c# oledb oledbconnection oledbdatareader
4个回答
1
投票
decimal sum;
for (i=0;i<rows;i++)
{
  sum += decimal.TryParse(dt["Column"][i].ToString(), out var value) ? value : (decimal)0L;
}

2
投票

我不认为你可以在Compute中使用强制转换,所以解决方案可能是这样的(VB.net代码):

Dim dt As New DataTable
dt.Columns.Add("test")

dt.Rows.Add("hello")
dt.Rows.Add("304")
dt.Rows.Add("-312")
dt.Rows.Add("213")
dt.Rows.Add("bye")

Dim intTotal As Integer = 0

For Each dr As DataRow In dt.Rows

    Dim intValue As Integer = 0

    If Integer.TryParse(dr("test"), intValue) Then
        intTotal += intValue
    End If

Next dr

MsgBox(intTotal)

1
投票

C#示例

Datatable dt = new DataTable()
dt.Columns.Add("test")
dt.Rows.Add("test2")
dt.Rows.Add("45")
dt.Rows.Add("12")
dt.Rows.Add("-213")
dt.Rows.Add("test3")

int total = 0

Foreach(DataRow dr in dt.Rows) {
    If (Integer.TryParse(dr("test")){
        total += dr("test").value)
    }
}

return total;

-1
投票

Compute方法允许类型转换。

var sum = dt.Compute("Sum(Convert(column, 'System.Int32'))");

你也可以使用LINQ:

int sum = dt.Rows.Select(dr=>(int)dr["column"]).Sum();

有关更多信息:MSDN

© www.soinside.com 2019 - 2024. All rights reserved.