0
我们使用LINQ to SQL项目小数精度丢失。分组后,不会从与组密钥相关的表中选择记录。运行分析器有助于发现在检索记录时添加的条件对于小数字段的精度较低。这是什么解决方案?记录不retriving当得到分组的记录
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]
但@ X4的值= 0.3333在生成的SQL,而在DB值0.33333333
这会导致记录无法回复。
该字段以简单的方式
[Column]
public decimal? CurrRateMultp { get; set; }
映射到SQL字段类型是
decimal(19, 8)
请帮忙更改所需添加什么精度。
您可以使用decimal.Round(数,3),或在查询 –
类似的东西在哪里x4'来自那些被分配到'@价值?在通过groups_进行回环时创建该SQL的代码在哪里?此外,数据库中的CurrRateMultp列的确切类型是什么? – juharr
检查数据库以查看类型是什么。它看起来像数据库是一个双和C#是一个单一的,没有任何意义。 C#十进制类型是96位。所以我怀疑数据库是一个nvar(这是一个字符串),并且有一个从字符串到网络库中的界面中单个的转换。 – jdweng