2016-07-27 12 views
2

Ich kann nicht verstehen, warum „das angegebene Ziel ungültig Ausnahme ist“ hier geworfen wird:‚angegebene Umwandlung ist ungültig‘ in LAMBDA Ausdruck, wenn Schwimmer Abfrage Feld

C# -Code:

die Ausnahme auslöst, wenn es um m.HadapGoalPercent Eigenschaft erreicht, i tryed den Datentyp x => x.Field<float>("HadapGoalPercent") auch Einzel- und Doppel zu ändern, aber es funktioniert nicht

for (int i = 0; i < dt.Rows.Count; i++) 
        { 
         Sales.Month m = new Sales.Month(Yearnum, (byte)(i+1)); 
         m.HadapGoal = dt.AsEnumerable().Where(x => x.Field<int>("MonthNum") == i + 1).Select(x => x.Field<int>("HadapGoalIncome")).Single(); 
         m.ShotefGoal = dt.AsEnumerable().Where(x => x.Field<int>("MonthNum") == i + 1).Select(x => x.Field<int>("ShotefGoalIncome")).Single(); 
         m.HadapGoalPercent = dt.AsEnumerable().Where(x => x.Field<int>("MonthNum") == i + 1).Select(x => x.Field<float>("HadapGoalPercent")).SingleOrDefault(); 
         m.ShotefGoalPercent = dt.AsEnumerable().Where(x => x.Field<int>("MonthNum") == i + 1).Select(x => x.Field<float>("ShotefGoalPercent")).SingleOrDefault(); 
         months.Add(m); 
        } 

das ist die Definitionen vonShotefGoalPercent und HadapGoalPercent Eigenschaften innerhalb Month Klasse:

public Single ShotefGoalPercent { get; set; } 
public Single HadapGoalPercent { get; set; } 

das ist dt Table:

(HadapGoalPercent und ShotefGoalPercent sind als Dezimalzahl definiert (5,4) in der SQL-Datenbank)

dt Datatable Image

vielen Dank für Ihre Zeit

+0

Haben Sie versucht, zu dezimieren Casting? Schließlich haben Sie gesagt, dass es in der DB als Dezimalzahl gespeichert ist. – sr28

+0

Werfen Sie einen Blick auf 'dt.Columns [" HadapGoalPercent "]. DataType' Eigenschaft. Es sollte Ihnen sagen, welche Besetzung Sie verwenden müssen. –

+0

ok ... dank @ sr28 wurde das Problem gelöst ich habe HadapGoalPercent, ShoefGoalPercent von single auf dezimal und das datatape in query auf dezimal geändert ... es funktioniert auch. Hier ist ein Thread, den ich jetzt über den Unterschied zwischen dezimal, float, single und double gefunden habe: http://stackoverflow.com/questions/618535/difference-between-decimal-float-and-double-in-net. warum schreibst du es nicht als Antwort? - Danke noch einmal – jonathana

Antwort

1

Laut meinem Kommentar bin ich mir nicht sicher, warum Sie nicht nur als Dezimalzahl Casting, wie Sie es wie in der DB gespeichert haben. Wenn Sie jedoch wirklich dies als Doppel möchten, können Sie versuchen:

Convert.ToDouble(value) 

Mit der Größe der Dezimalstellen in du, dass du vorbei sollte in Ordnung sein. Bei sehr großen Dezimalzahlen laufen Sie Gefahr, die Präzision zu verlieren, aber wie gesagt, ich glaube nicht, dass dies ein Problem für Sie sein wird.

Verwandte Themen