2017-04-20 10 views
0

Ich habe ein Problem mit dem Code unten:Table.compute() C# MIN, MAX und 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(",", "."); 

ich einige Daten sammle und in einer Tabelle zu speichern.

Die Spalte wird automatisch erstellt und der Typ ist dezimal.

Ich möchte die Minimal-, Maximal- und Mittelwert der Spalte berechnen den Wert ohne Berücksichtigung 0.

jedoch der folgende Fehler auftritt:

„Die Eingabezeichenfolge war nicht in einem korrekten Format“

Was mache ich falsch?

+0

Versuchen Sie, Ihre Ausdrücke in kleinere, vorzugsweise atomare Anweisungen aufzuteilen. Anstatt "Math.Round (Convert.ToDecimal (...))" verwenden Sie temporäre Variablen für die Anweisungen in Brackets, um zu ermitteln, wo genau Sie den Fehler erhalten. Alternativ können Sie auch die wquickwatch für den inneren Ausdruck verwenden und sehen, was sie bewerten. Ich nehme an, der Fehler tritt beim Aufruf von 'ToDecimal' auf, weil der angegebene Wert nicht konvertiert werden kann. Aber ohne den Wert, der * zur Verfügung gestellt wird, ist es unmöglich, genau zu sagen. – HimBromBeere

+0

danke für Ihre Hilfe. Unten ist die Lösung für mein Problem: –

Antwort

0

Nach ihm Hilfe, unten ist die Lösung für mein Problem:

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

Der Wert, der in meiner Berechnung war null zurückkehrt, versucht integer zu konvertieren wurde den Fehler gibt ich zitiert.

es zu lösen Ich habe einen Zustand, in dem es hinzugefügt „String.IsNullOrEmpty“ wenn sie wahr sind Änderungen auf „0“, wenn es falsch ist es, den Wert darüber informiert, dass es zurückgegeben. Nach diesem Schritt verwende ich ToDecimal.

Gelöstes Problem.

Verwandte Themen