2009-05-19 67 views
0

NULLであるかどうかをテストしても、dtblDetailの "Remark"列がNULLの場合、常にエラーになる次のLINQクエリがあります。LINQ to Dataset 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()のテストを追加すると、null参照例外がスローされます。

これを手伝ってもらえますか?

私は既に以下のウェブサイトをチェックしていますが、DBNULLをテストする以外の有用なものは見つかりませんでした。しかし、これは私の問題を解決しないと述べた。

答えて

2

を扱う避けるためその全体を「D」の項目空だった。 したがって、 'd.IsRemarkNull()'を呼び出すとnull参照例外が発生しました。エラーはできるだけ早く私はが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 == null? null : (d.IsRemarkNull() ? null : d.Remark) 
        }; 
0

エラーがから来ていますか?それはそれを引き起こしているd.IsRemarkNull()である可能性がありますか?その方法はどのように見えるのですか?

おそらく:

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

: 次のコードは、問題を修正しました。 varActiveAndUsedElementsWithDetails.First()はそれを生成できます。メソッドd.IsRemarkNull()はデータセット上で自動生成され、System.Data.DataRow.IsNull()メソッドを呼び出します。 "return this.IsNull(this.tableDetails.RemarkColumn);" – Marc

+0

私はSQLでlinqをまだ使用していませんが、nullではなく&DBNullを別々に扱いますか? !DBNull.Value.Equals(d.Remark)の行を明示的にフィルタリングするwhere節を追加しようとしましたか? – dmo

+0

はい、それは別々に扱われるため、d.Remark == nullをテストできません。しかし、生成されたmethod.IsRemarkNull()はこの状況を正確に処理する必要がありますが、ここではうまくいきません。 – Marc

0

は多分デシベルにNULLを許可しないこのフィールドは、そのためのデフォルト値を取得し、問題だったNULL値

+0

ヒントをありがとうが、フィールドは、データベース内のNULLを許可します。また、型指定されたdatatableフィールドはNULLを許可します。そのため、この自動生成d.IsRemarkNull()メソッドbtwがあります。 – Marc

関連する問題