문제

다음 LINQ 쿼리가있어서 DTBLDETAIL의 "비고"열이 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 ()에 대한 테스트를 추가 한 후 널 참조 예외가 발생합니다.

이것을 도와 줄 수 있습니까?

이미 다음 웹 사이트를 확인했지만 DBNULL을 테스트 해야하는 것 외에는 유용한 것을 찾지 못했습니다. 그러나 말했듯이 이것은 내 문제를 해결하지 못합니다.

도움이 되었습니까?

해결책

문제는 전체 'd'항목이 비어 있다는 것입니다. 따라서 'd.isremarknull ()'에 전화하면 널 참조 예외가 발생했습니다. 다음 코드는 문제를 해결했습니다.

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)
                    };

다른 팁

오류는 어디에서오고 있습니까? D.isremarknull ()이 원인이 될 수 있습니까? 그 방법은 어떻게 생겼습니까?

아마도:

DBNull.Value.Equals(d.Remark)

어쩌면이 필드는 DB에서 NULL을 허용하지 않으며 기본값을 얻고 NULL 값을 처리하지 마십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top