Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对具有string/null值的列使用dt.AsEnumerable().Sum_C#_Linq_Datatable_Sum - Fatal编程技术网

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);
除此之外,为什么要将转换后的数字再次存储在字符串变量中