【问题标题】:Table.compute() C# MIN, MAX and AVGTable.compute() C# 最小值、最大值和平均值
【发布时间】:2017-04-20 14:48:30
【问题描述】:

下面的代码有问题:

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。

但是发生了以下错误:

“输入的字符串格式不正确”

我做错了什么?

【问题讨论】:

  • 尝试将您的表达式拆分为更小的、最好是原子语句。因此,不要使用Math.Round(Convert.ToDecimal(...)) 对brackets 中的语句使用临时变量来评估您在哪里得到错误。或者,您也可以将 wquickwatch 用于内部表达式并查看它们的评估结果。我想在调用ToDecimal 时会发生错误,因为提供的值无法转换。但是如果没有 is 提供的价值,就不可能准确地说出来。
  • 感谢您的帮助。以下是我的问题的解决方案:

标签: c# filter datatable


【解决方案1】:

在他的帮助下,以下是我的问题的解决方案:

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。

问题已解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-30
    • 2023-03-31
    • 2016-12-29
    • 1970-01-01
    • 2014-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多