LINQ to SQL-Mapping Aus Geld zu Verdoppeln
-
08-06-2019 - |
Frage
Ich arbeite mit LINQ für die erste Zeit, und wollte das Mapping zu arbeiten, wenn ich ein Geld-Typ in SQL, aber meine-domain-Objekt-Eigenschaft ist vom Typ double.Wie kann ich das Ausdrücken soll, in der XML-Datei oder im code, so dass die Zuordnung nicht werfen die üblichen "invalid cast" - Ausnahme?
Lösung
In der DBML-XML-Datei, die Sie festlegen können, der Ausdruck Attribut einer Spalte element, so etwas wie dieses:
<Column Name="Table1.Amount" DbType="smallint" Type="System.Int32"
Expression="CAST(Table1.Amount as int)" />
Andere Tipps
Etwas off-topic, aber das ist etwas, das jeder kennen sollte beim arbeiten mit dem Geld, das geben Sie in SQL Server.
Sie nicht wollen, zu verwenden eine doppelte, die Sie verwenden möchten eine Dezimalzahl.
Ein Double ist eine lange, float und floating-point Arithmetik, sollten nie verwendet werden, für finanzielle Berechnungen.
Denken Sie an dieses, der Fraktionen, 1/3, 1/3 und 1/3 gleich 1 ist.Jedoch, ausgedrückt als Doppel-ie:
.3333 + .3333 + .3333 = .9999 nicht 1.
Sie denken vielleicht, dass verlieren ein Tausendstel eines cents ist trivial, aber es ist nicht, wenn Sie Ihre Arbeit mit jemandem elses Geld.
Verwenden Sie System.Dezimal.
ziemlich sicher, dass Geld-Karten System.Dezimal