在获取分组记录时,未以十进制精度检索的记录会丢失

本文关键字:记录 精度 检索 十进制 获取 | 更新日期: 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生成了整数小数。感谢所有!