报表查询,decimal类型字段丢失精度 返回

SqlSugar 处理完成
11 193
该叫什么 朽木 发布于1周前
悬赏:0 飞吻

我用以下代码,来提取数据库中没有的记录

var queryLeft = _baseDal.Db().Reportable(lstToMaintain).ToQueryable();
var queryRight = _baseDal.Db().Queryable<PriceCaseInfo>();
var lstNew = await _baseDal.Db().Queryable(queryLeft, queryRight, JoinType.Left, (x1, x2) => x1.RequestId == x2.RequestId && x1.PriceBookCode == x2.PriceBookCode)
    .Where((x1, x2) => string.IsNullOrEmpty(x2.RequestId))
    .Select((x1, x2) => x1)
    .ToListAsync();
//实体类
public class PriceCaseInfo
{
    [SugarColumn(ColumnDataType = "nvarchar(100)", ColumnName = "RequestId", IsNullable = true)]
    public string RequestId { get; set; }
    
    [SugarColumn(ColumnDataType = "nvarchar(100)", ColumnName = "PriceBookCode", IsNullable = true)]
    public string PriceBookCode { get; set; }
    
    [SugarColumn(ColumnDataType = "decimal(18,6)", ColumnName = "NewPrice", IsNullable = true)]
    public decimal? NewPrice { get; set; }
}

前面的查询中lstToMaintain也是一个实体类列表,其中有一个元素的NewPrice是0.20554, 数据库中不存在RequestId和PriceBookCode的数据, 经查询返回后,这个元素的NewPrice变成了0.2055

版本5.1.4.140


热忱回答11

  • 尝试更新到最新稳定版5.1.4.157还是一样。

    0 回复
  • 看了下打印的sql语句,decimal类型会转成Money类型,难怪只有小数点后4位。

    0 回复
  • 数据库是哪个

    0 回复
  • @fate sta:MS sql server

    0 回复
  •             db.CodeFirst.InitTables<PriceCaseInfo>();
                db.Insertable(new PriceCaseInfo()
                {
                    NewPrice = Convert.ToDecimal(0.20554),
                    PriceBookCode = "",
                    RequestId = ""
                }).ExecuteCommand();
               var xx=db.Queryable<PriceCaseInfo>()
                    .Select(it => it).ToList();

    没有重现你说的,需要提供完整DEMO

    0 回复
  • image.png

    0 回复
  • @fate sta:大佬,主要是这句,生成的sql语句会有 

    CAST(N'0.20554' AS MONEY) AS [NewPrice]

    var queryLeft = _baseDal.Db().Reportable(lstToMaintain).ToQueryable();

    0 回复
  • 我知道了 报表查询 生成的SQL问题 。这个我处理一下

    0 回复
  • @fate sta:希望大佬处理后更新个预览版

    0 回复
  • SqlSugarCore 5.1.4.158-preview17

    已修复

    0 回复
  • @fate sta:太感谢了!

    0 回复