Проблема LINQ to Dataset DBNULL / исключение нулевой ссылки - PullRequest
0 голосов
/ 19 мая 2009

У меня следующий запрос LINQ, который всегда приводит к ошибке, когда мой столбец «Замечание» в dtblDetail равен нулю, хотя я проверяю, равен ли он нулю.

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. Но, как сказано, это не решает мою проблему.

Ответы [ 3 ]

2 голосов
/ 25 мая 2009

Проблема заключалась в том, что весь элемент '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)
                    };
0 голосов
/ 19 мая 2009

возможно, это поле не допускает пустое значение в дБ, получает для него значение по умолчанию и избегает обработки нулевых значений

0 голосов
/ 19 мая 2009

Откуда исходит ошибка? Возможно ли, что именно d.IsRemarkNull () вызывает его? Как выглядит этот метод?

Может быть:

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