null許容値ではない小数を合計した次のクエリを実行しているときに、エラーが発生していました。場所と組織の組み合わせにマグニチュード値がない場合、マグニチュードはnullでした。
let q = query { from m in Measure do
where (locations.Contains(m.Location)
&& organizations.Contains(m.Organization))
sumBy m.Magnitude }
エラー:ヌル値は、ヌル不可能な値タイプである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) }