从 Money 到 Double 的 LINQ 到 SQL 映射

Posted

技术标签:

【中文标题】从 Money 到 Double 的 LINQ 到 SQL 映射【英文标题】:LINQ to SQL Mapping From Money to Double 【发布时间】:2008-08-19 14:27:08 【问题描述】:

我是第一次使用 LINQ,当我在 SQL 中有一个货币类型时,我希望让映射工作,但我的域对象属性是 double 类型。如何在 XML 文件或代码中表达这一点,以便映射不会引发通常的“无效转换”异常?

【问题讨论】:

【参考方案1】:

有点离题,但这是每个人在 SQLServer 中使用 Money 类型时都应该知道的。

你不想用双精度,你想用小数。

Double 是一个长浮点数,浮点运算绝对不能用于财务计算。

想想看,分数 1/3、1/3 和 1/3 等于 1。但是,当表示为双精度 ie 时:

.3333 + .3333 + .3333 = .9999 不是 1。

您可能认为损失千分之一是微不足道的,但当您使用别人的钱时,情况并非如此。

使用 System.Decimal。

【讨论】:

【参考方案2】:

在 DBML XML 文件中,您可以将 Column 元素的 Expression 属性设置为如下所示:

 <Column Name="Table1.Amount" DbType="smallint" Type="System.Int32" 
         Expression="CAST(Table1.Amount as int)" />

【讨论】:

【参考方案3】:

很确定 Money 映射到 System.Decimal

Check here

【讨论】:

以上是关于从 Money 到 Double 的 LINQ 到 SQL 映射的主要内容,如果未能解决你的问题,请参考以下文章

如何从 LINQ 转移到 SQL 到“LINQ 到 WCF”?

Java 到 Jackson JSON 序列化:Money 字段

LINQ to Entities 无法识别方法 Double Round(Double, Int32, System.MidpointRounding) 方法

请问在c# winform中怎么将文本框中的数值保存到数据库中money类型的字段中???

LINQ 计算 SortedList<dateTime,double> 的移动平均值

无法让 double.TryParse 在 Linq 表达式树中工作