Table.compute()C#MIN,MAX和AVG

时间:2017-04-20 14:48:30

标签: c# filter datatable

我遇到以下代码问题:

val_par_Decimal_Min = Math.Round(Convert.ToDecimal(dsTabDados.Tables[EquipTrigger[TGR]].Compute("MIN(" + col.ColumnName + ")", col.ColumnName + " <> 0")?.ToString() ?? "0"), 2).ToString().Replace(",", ".");

val_par_Decimal_Max = Math.Round(Convert.ToDecimal(dsTabDados.Tables[EquipTrigger[TGR]].Compute("MAX(" + col.ColumnName + ")", col.ColumnName + " <> 0")?.ToString() ?? "0"), 2).ToString().Replace(",", ".");

val_par_Decimal_Med = Math.Round(Convert.ToDecimal(dsTabDados.Tables[EquipTrigger[TGR]].Compute("AVG(" + col.ColumnName + ")", col.ColumnName + " <> 0")?.ToString() ?? "0"), 2).ToString().Replace(",", ".");

我正在收集一些数据并保存在表格中。

自动创建列,类型为十进制。

我想计算列的最小值,最大值和平均值,而不考虑值0。

但是发生了以下错误:

  

&#34;输入字符串的格式不正确&#34;

我做错了什么?

1 个答案:

答案 0 :(得分:0)

在他的帮助下,下面是解决我问题的方法:

val_par_Decimal_Min = Math.Round(Convert.ToDecimal(string.IsNullOrEmpty(dsTabDados.Tables[EquipTrigger[TGR]].Compute("MIN(" + col.ColumnName + ")", col.ColumnName + "<>" + 0).ToString()) ? "0" : dsTabDados.Tables[EquipTrigger[TGR]].Compute("MIN(" + col.ColumnName + ")", col.ColumnName + "<>" + 0).ToString()), 2).ToString().Replace(",", ".");

val_par_Decimal_Max = Math.Round(Convert.ToDecimal(string.IsNullOrEmpty(dsTabDados.Tables[EquipTrigger[TGR]].Compute("MAX(" + col.ColumnName + ")", col.ColumnName + "<>" + 0).ToString()) ? "0" : dsTabDados.Tables[EquipTrigger[TGR]].Compute("MAX(" + col.ColumnName + ")", col.ColumnName + "<>" + 0).ToString()), 2).ToString().Replace(",", ".");

val_par_Decimal_Med = Math.Round(Convert.ToDecimal(string.IsNullOrEmpty(dsTabDados.Tables[EquipTrigger[TGR]].Compute("AVG(" + col.ColumnName + ")", col.ColumnName + "<>" + 0).ToString()) ? "0" : dsTabDados.Tables[EquipTrigger[TGR]].Compute("AVG(" + col.ColumnName + ")", col.ColumnName + "<>" + 0).ToString()), 2).ToString().Replace(",", ".");

在我的计算中返回的值为null,尝试转换为整数时给出了我引用的错误。

为了解决这个问题,我添加了一个条件,它是 “string.IsNullorEmpty” 如果true变为“0”,如果它为false,它会通知值它回来了。 在此步骤之后,我使用toDecimal。

解决了问题。