如何在 C# 列中仅添加数字
How to add only numeric numbers in a column C#
我想在 C# 中获取 DataTable 列的总和。但是,我的专栏包含字符串和数值。有没有办法只汇总列中找到的数值?
数据表
Column
hello
304
-312
213
bye
我试过使用下面的代码,但是当单元格不是数值时它不起作用。
var total = dt.Compute("Sum(column)","");
decimal sum;
for (i=0;i<rows;i++)
{
sum += decimal.TryParse(dt["Column"][i].ToString(), out var value) ? value : (decimal)0L;
}
我认为您不能在 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)
Compute 方法允许类型转换。
var sum = dt.Compute("Sum(Convert(column, 'System.Int32'))");
您也可以使用 LINQ:
int sum = dt.Rows.Select(dr=>(int)dr["column"]).Sum();
更多信息:MSDN
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;
我想在 C# 中获取 DataTable 列的总和。但是,我的专栏包含字符串和数值。有没有办法只汇总列中找到的数值?
数据表
Column
hello
304
-312
213
bye
我试过使用下面的代码,但是当单元格不是数值时它不起作用。
var total = dt.Compute("Sum(column)","");
decimal sum;
for (i=0;i<rows;i++)
{
sum += decimal.TryParse(dt["Column"][i].ToString(), out var value) ? value : (decimal)0L;
}
我认为您不能在 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)
Compute 方法允许类型转换。
var sum = dt.Compute("Sum(Convert(column, 'System.Int32'))");
您也可以使用 LINQ:
int sum = dt.Rows.Select(dr=>(int)dr["column"]).Sum();
更多信息:MSDN
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;