Сопоставление LINQ to SQL от денег к двойному
-
08-06-2019 - |
Вопрос
Я впервые работаю с LINQ и хотел, чтобы сопоставление работало, когда у меня есть тип денег в SQL, но мое свойство объекта домена имеет тип double.Как я могу выразить это в XML-файле или в коде, чтобы сопоставление не вызывало обычное исключение «недопустимое приведение»?
Решение
В XML-файле DBML вы можете установить атрибут Expression элемента Column примерно так:
<Column Name="Table1.Amount" DbType="smallint" Type="System.Int32"
Expression="CAST(Table1.Amount as int)" />
Другие советы
Немного не по теме, но это должен знать каждый при работе с типом Money в SQLServer.
Вы не хотите использовать двойное число, вы хотите использовать десятичное число.
Double — это длинное число с плавающей запятой, и арифметика с плавающей запятой никогда не должна использоваться для финансовых расчетов.
Подумайте вот о чем: дроби 1/3, 1/3 и 1/3 равны 1.Однако, если выразить это как двойной т.е.:
0,3333 + 0,3333 + 0,3333 = 0,9999, а не 1.
Вы можете подумать, что потерять тысячную долю цента — это тривиально, но это не так, когда вы работаете с чужими деньгами.
Используйте System.Decimal.
почти уверен, что деньги сопоставляются с System.Decimal