2

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) }
4

2 に答える 2

5

sumByNullable

于 2012-04-17T00:26:12.453 に答える
3

これはLINQからSQLへの問題です(ただし、SQLでは空の列を合計するとNULLになるため、これは仕様によるものです。ここを参照してください)、F#に固有ではありません。回避策は、リンクされたMSDNフォーラムスレッドの提案と一致しているようです。

于 2012-04-17T16:53:48.710 に答える