Friday, February 4, 2011

LINQ to SQL Mapping From Money to Double

I'm working with LINQ for the first time and wanted to get the Mapping to work when I have a money type in SQL, but my domain object property is of type double. How can I express this in the XML file, or in code so that the mapping does not throw the usual "invalid cast" exception?

  • pretty sure Money maps to System.Decimal

    Check here

  • Correct! This now works, but what about something like smallint to integer?

  • In the DBML XML file, you can set the Expression attribute of a Column element to something like this:

     <Column Name="Table1.Amount" DbType="smallint" Type="System.Int32" 
             Expression="CAST(Table1.Amount as int)" />
    
  • Excellent! Thanks again for the help!

  • Slightly off topic, but this is something everyone should know when working with the Money type in SQLServer.

    You don't want to use a double, you want to use a decimal.

    A Double is a long float, and floating point arithmetic should never be used for financial calculations.

    Think of this, the fractions 1/3, 1/3 and 1/3 equal 1. However, when expressed as a double ie:

    .3333 + .3333 + .3333 = .9999 not 1.

    You may think that losing a thousandth of a cent is trivial, but its not when your working with someone elses money.

    Use System.Decimal.

    From FlySwat

0 comments:

Post a Comment