2011-08-23 57 views
1

我的程序一直拋出一個InvalidOperationException異常,錯誤爲「無法將null值分配給類型爲System.Boolean的成員,這是一個不可爲空的值類型」。我無法理解這一點,因爲我的代碼沒有試圖分配任何東西,只是遍歷列表並生成所有索賠號的字符串(如果查詢沒有關聯的索賠,則返回空字符串):試圖調試InvalidOperationException

public string ClaimNumbers 
{ 
    get 
    { 
     if (Enquiry.Claims != null && Enquiry.Claims.Count>0) 
     { 
      var sb = new StringBuilder(); 
      foreach (var claim in Enquiry.Claims) 
      { 
       sb.Append(claim.ClaimId.ToString("00000") + ", "); 
      } 
      return sb.ToString().Substring(0, sb.Length - 2); 
     } 
     return string.Empty; 
    } 
} 

奇怪的是,當我步調試器中的代碼,並試圖擴大Enquiry.Claims.Count,我看到:

enter image description here

但是當我暫停了一下,跨上下一行更改爲:

enter image description here

我正在使用Linq to Sql,並且Claims是一個實體集,所以我想知道是否可能與從數據庫中提取數據有關,但是我不確定,所以想不出來解決問題的最好辦法是。

+0

不太確定是什麼導致了實際的錯誤,但我想指出,將鼠標懸停在屬性上(和/或打開自動窗口)會通過調用屬性來改變應用程序的行爲,然後才能進入它們! (並繞過它自己的小偷看斷點) –

+0

我已經看到這與Linq2SQL相當頻繁,特別是在SQL CE上。這可能意味着查詢在調試器要求值時超時。 – leppie

回答

0

我假設CLAIMS表有一列映射到您的Claims實體中的布爾屬性,並且該列至少包含一個NULL值。

+0

謝謝,我是愚蠢的,並沒有刪除我的表中的所有空值,然後將該字段設置爲非LINK到SQL! –

+0

@Jordan:實際上,這裏真正的「愚蠢」是,你在Linq2Sql中將列設置爲非null,但不在數據庫中。如果您希望數據庫中的列非空,那麼您將被告知存在具有無效數據的行。 –

+1

是的,它實際上是一個讓數據庫發生變化但沒有提交的同事,但是當我被要求更新dbml時,我肯定已經檢查了數據庫。學過的知識! –

0

這是最有可能發生的,因爲你使用LINQ to SQL,或這樣的事情,並在該行準確的結果集合爲空,這將迫使LINQ引擎來初始化null返回值。 所以它會拋出一個異常

要解決此問題,最有可能的是,看看集合的Count將如何恢復,並聲明nullable類型爲"?"符號。

希望這會有所幫助。