2009-05-19 2 views
0

NULL 인 경우에도 테스트하더라도 dtblDetail의 "Remark"열이 null 일 때 항상 오류가 발생하는 다음 LINQ 쿼리가 있습니다.LINQ to Dataset DBNULL 문제/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.IsRemarkNull() ? null : d.Remark 
         }; 

오류 메시지이었다 은 "테이블"dtblDetails '에서 열'비 '의 값이 DBNull이있다. " d.IsRemarkNull()에 대한 테스트를 추가 한 후 null 참조 예외가 발생합니다.

도와 드릴까요?

나는 이미 다음 웹 사이트를 확인했지만 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

+0

나는 linq를 아직 SQL과 함께 사용하지 않았지만 null이 아니고 & DBNull을 별도로 다루었습니까? where 절을 추가하여 명시 적으로 행을 필터링하려고 했습니까? DBNull.Value.Equals (d.Remark)? – dmo

+0

예, 별도로 처리되므로 d.Remark == null을 테스트 할 수 없습니다. 그러나 생성 된 method.IsRemarkNull() 정확히이 상황을 처리해야하지만 여기에 작동하지 않는 것 ... – Marc

0

어쩌면 DB에 null을 허용하지 않습니다이 필드는, 그것의 기본 값을 얻고, 문제가 있었다 null 값

+0

힌트를 가져 주셔서 감사하지만 필드는 db에 NULL을 허용합니다. 또한 형식화 된 데이터 테이블 필드는 NULL을 허용합니다. 이것이 자동 생성 된 d.IsRemarkNull() 메소드 btw가있는 이유입니다. – Marc