Попробуйте:
public static decimal Sum(this DataTable dt, string columnName) {
return (
from c in dt.AsEnumerable()
where !c.IsNull(columnName)
select c[columnName]
).Sum(value => Convert.ToDecimal(value));
}
Ваш тип столбца должен быть конвертируемым в decimal
.
Я думаю, что это более компактно:
public static decimal Sum(this DataTable dt, string columnName) {
return dt.AsEnumerable().
Where(row => !row.IsNull(columnName)).
Sum(row => Convert.ToDecimal(row[columnName]));
}
Вы также можете создавать другие версии для других целочисленных типов, поддерживаемых Sum
(double
, float
, int
, long
).
Кроме того, DataTable
уже поддерживает этот сценарий :
public static T Sum<T>(this DataTable dt, string columnName) {
var sum = dt.Compute("Sum(" + columnName + ")", "");
if (sum == DBNull.Value) return default(T);
return (T)Convert.ChangeType(sum, typeof(T));
}