2009-05-19 24 views
0

我有以下LINQ查詢總是在dtblDetail中的「備註」列爲空時導致錯誤,即使我測試它是否爲NULL。LINQ到數據集DBNULL問題/空引用異常

var varActiveAndUsedElementsWithDetails = 
         from e in dtblElements 
         join d in dtblDetails on e.PK equals d.FK into set 
         from d in set.DefaultIfEmpty() 
         where (e.ElementActive == true) 
         select new 
         { 
          ElementPK = e.PK, 
          Remark = d.IsRemarkNull() ? null : d.Remark 
         }; 

該錯誤消息是: 「表‘dtblDetails’列‘備註’的值是DBNull的」。 在爲d.IsRemarkNull()添加測試之後,會引發空引用異常。

你能幫我嗎?

我已經檢查了以下網站,但沒有發現任何其他有用的東西,我必須測試DBNULL。但據說這並不能解決我的問題。

回答

2

的問題是,整個「d」項目是空的。 所以調用'd.IsRemarkNull()'導致null引用異常。 以下代碼修復了此問題:

var varActiveAndUsedElementsWithDetails = 
        from e in dtblElements 
        join d in dtblDetails on e.PK equals d.FK into set 
        from d in set.DefaultIfEmpty() 
        where (e.ElementActive == true) 
        select new 
        { 
         ElementPK = e.PK, 
         Remark = d == null? null : (d.IsRemarkNull() ? null : d.Remark) 
        }; 
0

哪裏是哪裏來的錯誤?它可能是造成它的d.IsRemarkNull()嗎?這種方法是什麼樣的?

也許:

DBNull.Value.Equals(d.Remark) 
+0

只要我取第一個包含DBNull的值,就會發生錯誤。所以varActiveAndUsedElementsWithDetails.First()可以產生它。方法d.IsRemarkNull()是在數據集上自動生成的,並調用System.Data.DataRow.IsNull()方法:「return this.IsNull(this.tableDetails.RemarkColumn);」 – Marc 2009-05-19 06:52:47

+0

我還沒有使用linq與SQL尚未 - 但不是null和DBNull分開處理?你有沒有試過添加一個where子句來明確地過濾where行!DBNull.Value.Equals(d.Remark)? – dmo 2009-05-19 06:59:53

0

也許這個領域不允許在分貝空,得到一個默認值它,避免處理空值