Linq:Nullable对象必须有一个值

时间:2017-04-19 17:40:05

标签: vb.net linq

我有这个查询为linq:

  Dim result = (From c In query _
  Where Not bannedCCList.Contains(c.num_reserv)  _                                    
  Group c By c.code_operation, c.code_type _
  Into nbr = Count(CInt(c.Code_bien)), acmp = Sum(CDec(c.TotalAcomp)) _
  Select nbr,  acmp).ToList

但我得到错误:

  

允许Null的对象必须具有值

我如何放acmp=0 if c.TotalAcomp is nothing

我的查询如下:

acmp =IIF(Sum(CDec(c.TotalAcomp)) is nothing,0, Sum(CDec(c.TotalAcomp)) _

但它不起作用。

2 个答案:

答案 0 :(得分:0)

试试这个:

acmp =IIF(Sum(CDec(c.TotalAcomp)) is DBNull.Value,0, Sum(CDec(c.TotalAcomp)) 

答案 1 :(得分:0)

  1. 不要使用IIF。它是旧的VB6垃圾,例如即使真实部分返回true,它也始终评估双方。请改用If

  2. 检查变量是否在错误的地方发生。你不得不在Sum函数中检查它。

  3. 还可以使用可空类型的HasValueValue属性。 在这种情况下,您不必强制转换任何表达式(除了您转换为错误的类型。如果您的变量类型为Double,请不要转换为Decimal)。

  4. 以下代码对我有用:

    acmp = Sum(If(Not c.TotalAcomp.HasValue, 0, c.TotalAcomp.Value))