在获取分组记录时,未以十进制精度检索的记录会丢失
本文关键字:记录 精度 检索 十进制 获取 | 更新日期: 2023-09-27 18:15:17
我们有一个使用Linq to SQL的项目。分组后,不从与组Key相关的表中选择记录。运行剖析器有助于发现在检索记录时添加的条件对于小数字段的精度较低。这个问题的解决方法是什么?
var groupedSO = from so in db.SalesOrders
orderby so.BizDate, so.POSID ascending
where SalesOrders.Contains(so.POSID)
group so by
new
{
so.BizDate.Value.Date,
so.CurrRateMultp, //Decimal: Value in DB is 0.33333333
}
into grps
select grps;
当循环遍历组时,
foreach (var orders in groupedSO)
{
foreach (var order in orders)
{
//No records available
}
}
使用类似于
的SQL选择记录select <Fields>
from Table
where CONVERT(DATE, [t0].[bizdate]) = @P0 AND @x4 = [t0].[currratemultp]
在生成的SQL中@x4=0.3333的值,而在DB中该值为0.333333
这将导致不检索记录。
字段以一种简单的方式映射
[Column]
public decimal? CurrRateMultp { get; set; }
SQL中的字段类型
decimal(19, 8)
感谢所有看过的人,
我明白了。ColumnAttribute有一个命名参数DbType。尽管微软网站上写着
使用此属性指定定义列的确切文本Transact-SQL表声明。仅当时指定DbType属性您计划使用CreateDatabase创建数据库的实例。DbType的默认值是从成员类型中推断出来的。更多的
将其设置为SQL类型可以帮助我获得精度。因此,我将属性声明为
[Column(DbType = "decimal(19, 8)")]
public decimal? CurrRateMultp { get; set; }
这使得SQL生成了整数小数。感谢所有!