Как добавить только числовые цифры в столбце C # - PullRequest
0 голосов
/ 25 февраля 2019

Я хотел бы получить общую сумму столбца DataTable в C #.Однако мой столбец состоит из строковых и числовых значений.Есть ли способ суммировать только числовые значения, найденные в столбце?

DataTable

Column

hello
304
-312
213
bye

Я попытался использовать приведенный ниже код, но он не будет работать, если в ячейке нет числового значения.

var total = dt.Compute("Sum(column)","");

Ответы [ 4 ]

0 голосов
/ 25 февраля 2019

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;
0 голосов
/ 25 февраля 2019

Я не думаю, что вы можете использовать приведение в 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)
0 голосов
/ 25 февраля 2019

Метод Compute допускает преобразование типов.

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

Вы также можете использовать LINQ:

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

Для получения дополнительной информации: MSDN

0 голосов
/ 25 февраля 2019
decimal sum;
for (i=0;i<rows;i++)
{
  sum += decimal.TryParse(dt["Column"][i].ToString(), out var value) ? value : (decimal)0L;
}
...