Я пытаюсь использовать Linq для SQL, чтобы отфильтровать таблицу с помощью значения bool, допускающего обнуляемое значение, основанное на переменной.
Но если значение переменной равно NULL, LINQ, кажется, переводит запрос в Field = NULL
вместо Field IS NULL
.
Основано на других сообщениях, которые я видел, чтобы использовать object.Equals
для правильного сопоставления. И это работает, но только когда значение переменной равно нулю.
Пример кода:
bool? relevantValue = null;
var q = from m in MyTable
where ???
select m;
Случай 1:
Если условие where равно object.Equals(m.IsRelevant, relevantValue)
, оно работает, когда relevantValue
равно нулю и true, но возвращает неверные результаты, когда relevantValue
= false. Он преобразуется в SQL в
ГДЕ ((СЛУЧАЙ КОГДА [t0]. [IsRelevant] = 1 ТОГДА 1 ИЛИ 0 КОНЕЦ)) = 0
Случай 2: Для where (relevantValue == null ? object.Equals(m.IsRelevant, relevantValue) : m.IsRelevant == relevantValue)
он работает для relevantValue
= true или false, но когда null выдает ошибку, которая:
Аргумент 'value' был неправильного типа. Ожидаемый «System.Boolean». Фактический 'System.Nullable`1 [System.Boolean]'.
Есть ли у меня другие параметры, которые будут работать для значений null, true и false?