当我执行以下查询时,我得到一个错误,该查询总结了一个不可为空的小数。当位置/组织组合没有幅度值时,幅度为零。
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) }
答案 0 :(得分:5)
答案 1 :(得分:3)
这是一个LINQ-to-SQL问题(但是在设计上,因为在SQL求和中,空列导致NULL,请参阅here),而不是特定于F#。您的解决方法似乎与链接的MSDN论坛主题中的建议相匹配。