Проблема LINQ с Dataset DBNULL / исключение нулевой ссылки
Вопрос
У меня есть следующий запрос 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 в базе данных, получите для него значение по умолчанию и избегайте обработки нулевых значений