c# - using dt.AsEnumerable().Sum for columns having string/null value -
i using following way total of column datatable
string total = dt.asenumerable().sum(x => x.field<decimal>("col1")).tostring();
this works fine when values of col1 number.
my question is- lets consider if 1 value of col1 string or null or else other number, above code throw error obviously.
is there way check whether value number , use '0' instead if value not number.
i tried -
string total = dt.asenumerable().sum(x => x.field<decimal>("col1") int ? x.field<decimal>("col1") : 0).tostring();
but not sure if correct way.
please help
if it's not decimal
string
invalidcastexception
in field<t>
method. have know type is.
i assume col1
can null
, field<t>
supports nullable types:
decimal total = dt.asenumerable() .sum(r => r.field<decimal?>("col1") ?? 0);
or without replacing null
0
:
decimal? total = dt.asenumerable() .sum(r => r.field<decimal?>("col1")); // use total.hasvalue , total.value
presuming string
, use decimal.tryparse
:
decimal d = 0; decimal total = dt.asenumerable() .where(r => decimal.tryparse(r.field<string>("col1"), out d)) .sum(r => d);
if don't know type use object.tostring
:
decimal total = dt.asenumerable() .where(r => !r.isnull("col1") && decimal.tryparse(r["col1"].tostring(), out d)) .sum(r => d);
apart that, why store converted number again in string variable?
Comments
Post a Comment