[英]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.