这是在查询中对十进制值类型进行求和的最佳方式吗?
问题描述:
我在执行下面的查询时总结了一个不可空的十进制数字时出错。当位置/组织组合没有量值时,幅度为零。这是在查询中对十进制值类型进行求和的最佳方式吗?
let q = query { from m in Measure do
where (locations.Contains(m.Location)
&& organizations.Contains(m.Organization))
sumBy m.Magnitude }
错误:无法将null值分配给System.Decimal类型为非空值类型的成员。
我用下面的方法解决了这个问题。这是否有更好的方法来做到这一点?
let convert (n:Nullable<decimal>) =
let c:decimal = 0M
if n.HasValue then n.Value else c
let q = query { from m in Measure do
let nullable = Nullable<decimal>(m.Magnitude)
where (locations.Contains(m.Location)
&& organizations.Contains(m.Organization))
sumBy (convert(nullable)) }
谢谢。我改变了我的查询以下。
query { for m in db.Measurement do
let nullable = Nullable<decimal>(m.Magnitude)
where (m.Measure = me
&& (if slice.Organization > 0L then organizationUnits.Contains(m.PrimalOrganizationUnit.Value) else true)
&& (if slice.Location > 0L then locationUnits.Contains(m.PrimalLocationUnit.Value) else true))
sumByNullable (nullable) }