我在執行下面的查詢時總結了一個不可空的十進制數字時出錯。當位置/組織組合沒有量值時,幅度爲零。這是在查詢中對十進制值類型進行求和的最佳方式嗎?
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) }