2017-04-20 10 views
0

私は以下のコードに問題があります:私はいくつかのデータを収集し、テーブル内に保存していますTable.compute()C#MIN、MAXおよびAVG

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(",", "."); 

を。

カラムは自動的に作成され、タイプは10進数です。

Iは、次のエラーが発生しているが値0

無視カラムの最小値、最大値および平均値を計算する:

「は入力文字列が正しい形式ではありませんでした」

私は間違っていますか?以下、彼の助けを借りた後

+0

式をより小さく、好ましくはアトミックな文に分割してみてください。したがって、 'Math.Round(Convert.ToDecimal(...)) 'の代わりに、ブラケット内のステートメントのテンポラリ変数を使用して、エラーを正確に取得する場所を評価します。代わりに、内部表現にwquickwatchを使用して、それらが評価するものを見ることもできます。与えられた値は変換できないので、 'ToDecimal'を呼び出すときにエラーが発生すると思います。しかし、*正確に言うことは不可能です。 – HimBromBeere

+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(",", "."); 

私の計算に戻った値が整数に変換しようとすると、私が引用されたエラーを与えていた、ヌルました。それを解決するために

私はそれがfalseの場合は「0」に真の変化は、それが返された値を通知した場合、それは「string.IsNullorEmpty」である条件を追加しました。 この手順の後、私はtoDecimalを使用します。

解決済みの問題。

関連する問題