C# 对具有string/null值的列使用dt.AsEnumerable().Sum
我使用以下方法从数据表中获取一列的总数C# 对具有string/null值的列使用dt.AsEnumerable().Sum,c#,linq,datatable,sum,C#,Linq,Datatable,Sum,我使用以下方法从数据表中获取一列的总数 string total = dt.AsEnumerable().Sum(x => x.Field<decimal>("col1")).ToString(); string total=dt.AsEnumerable().Sum(x=>x.Field(“col1”)).ToString(); 当col1的所有值都为number时,此操作可以正常工作 我的问题是,让我们考虑如果COL1的任何一个值是字符串或NULL或是除数字以外的任何其
string total = dt.AsEnumerable().Sum(x => x.Field<decimal>("col1")).ToString();
string total=dt.AsEnumerable().Sum(x=>x.Field(“col1”)).ToString();
当col1的所有值都为number时,此操作可以正常工作
我的问题是,让我们考虑如果COL1的任何一个值是字符串或NULL或是除数字以外的任何其他值,上述代码将明显地抛出错误。 是否有方法检查该值是否为数字,如果该值不是数字,则使用“0”
我试过了-string total = dt.AsEnumerable().Sum(x => x.Field<decimal>("col1") is int ? x.Field<decimal>("col1") : 0).ToString();
string total=dt.AsEnumerable().Sum(x=>x.Field(“col1”)是int?x.Field(“col1”):0.ToString();
但不确定它是否正确
请帮助如果它不是
十进制
而是字符串
,您甚至会在。所以你必须知道它是什么类型的
我假设Col1
可以是null
,字段
支持可空类型:
decimal total = dt.AsEnumerable()
.Sum(r => r.Field<decimal?>("Col1") ?? 0);
假定字符串
,可以使用decimal.TryParse
:
decimal d = 0;
decimal total = dt.AsEnumerable()
.Where(r => decimal.TryParse(r.Field<string>("Col1"), out d))
.Sum(r => d);
除此之外,为什么要将转换后的数字再次存储在字符串变量中?如果它不是
十进制
,而是字符串
,则在字符串变量中甚至会出现InvalidCastException
。所以你必须知道它是什么类型的
我假设Col1
可以是null
,字段
支持可空类型:
decimal total = dt.AsEnumerable()
.Sum(r => r.Field<decimal?>("Col1") ?? 0);
假定字符串
,可以使用decimal.TryParse
:
decimal d = 0;
decimal total = dt.AsEnumerable()
.Where(r => decimal.TryParse(r.Field<string>("Col1"), out d))
.Sum(r => d);
除此之外,为什么要将转换后的数字再次存储在字符串变量中