这是在查询中对十进制值类型求和的最佳方法吗?

Art*_*eef 2 f#

当我执行以下查询时,我得到一个错误,该查询总结了一个不可为空的小数.当位置/组织组合没有幅度值时,幅度为零.

let q = query { from m in Measure do
                  where (locations.Contains(m.Location) 
                         && organizations.Contains(m.Organization))
                  sumBy m.Magnitude }
Run Code Online (Sandbox Code Playgroud)

错误:无法将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)) }
Run Code Online (Sandbox Code Playgroud)

谢谢.我将查询更改为以下内容.

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) }
Run Code Online (Sandbox Code Playgroud)