繁体   English   中英

如何在实体框架中比较可为空的小数?

[英]How to compare nullable decimal in Entity Framework?

我想在实体框架 LINQ 中比较来自数据库的可为空的十进制值。

我尝试了这些方法:

return Db.Products.Any(x =>
        (x.WholeSalePriceVATOut== null && product.WholeSalePriceVATOut== null) ?
        true : (x.WholeSalePriceVATOut== null || product.WholeSalePriceVATOut== null) ?
        false : (Decimal.Compare((decimal)x.WholeSalePriceVATOut, (decimal)product.WholeSalePriceVATOut) == 0) ? true : false)

return Db.Products.Any(x =>
    ((x.WholeSalePriceVATOut.HasValue) ? (decimal?)Math.Round((decimal)x.WholeSalePriceVATOut, 3) : null) == ((product.WholeSalePriceVATOut.HasValue) ? (decimal?)Math.Round((decimal)product.WholeSalePriceVATOut, 3) : null))

return Db.Products.Any(x =>
Decimal.Compare((x.WholeSalePriceVATOut == null) ? -1 : (decimal)x.WholeSalePriceVATOut, (product.WholeSalePriceVATOut == null) ? -1 : (decimal)product.WholeSalePriceVATOut) == 0) ? true : false)

所有这些例子都抛出:

可为空的对象必须有值

是否有一些优雅的方法来比较可为空的十进制?

只需使用Nullable.Equals() 以下内容应该足够了:

return Db.Products.Any(p => 
          Nullable.Equals(p.WholeSalePriceVATOut, product.WholeSalePriceVATOut));

当 EF 将其转换为 SQL 时,SQL 的相关部分将类似于:

WHERE (`Product`.`WholeSalePriceVATOut` = @p__0) OR 
      ((`Product`.`WholeSalePriceVATOut` IS  NULL) AND (@p__0 IS  NULL))))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM