2017-04-19 35 views
0

我有這個查詢作爲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 

,但我得到的錯誤:

An object that allows Null must have a value

我怎麼可以把0​​

我,我查詢看起來像:

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

但它不起作用。

+0

這是LinqToSql?什麼類型是'TotalAcomp'?這是一個可空的Decimal嗎? –

+0

它是一個可爲空的double TotalAcomp = a.Field(Of Double?)(「TotalAcomp」) –

+1

類似於'acmp = Sum(CDec(If(c.TotalAcomp,0)))''可以工作。 – Mark

回答

0

試試這個:

acmp =IIF(Sum(CDec(c.TotalAcomp)) is DBNull.Value,0, Sum(CDec(c.TotalAcomp)) 
0
  1. 請勿使用IIF。它是舊的VB6垃圾,例如即使真實部分回覆真實,它也總是評估雙方。改爲使用If

  2. 你檢查變量是否在錯誤的地方發生了什麼。之後您不得不在Sum函數中檢查它。

  3. 還使用HasValueValue可空類型的屬性。 在這種情況下,你不必施放任何你的表情(除了鑄造錯誤的類型,如果你的變量類型爲Double不能鑄造到Decimal)。

下面的代碼爲我工作:

acmp = Sum(If(Not c.TotalAcomp.HasValue, 0, c.TotalAcomp.Value)) 
相關問題