Проблема LINQ с Dataset DBNULL / исключение нулевой ссылки

StackOverflow https://stackoverflow.com/questions/881225

  •  22-08-2019
  •  | 
  •  

Вопрос

У меня есть следующий запрос 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
                        };

Сообщение об ошибке было следующим:"Значение для столбца '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)

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top