Полагаю, что он генерирует и использует запрос SQL в форме, которая ожидает ненулевое значение:
where x.SomeProperty = @param
Вместо SQL для отображения семантики с нулевым равенством c #:
where x.SomeProperty is null
(ключевым моментом здесь является то, что в c # ноль равен нулю; в ANSI-SQL ноль не равен ни нулю, ни (смущающе) не равен нулю - для проверки нулей необходим другой синтаксис)
Я видел, что LINQ-to-SQL делает то же самое, и согласен, что это нелогично.Единственное предложение, которое у меня есть: протестируйте параметр кандидата на null самостоятельно и вместо этого проведите проверку константы / литерала == null
.Вероятно, он мог бы сделать то же самое, проверив дерево выражений и переписав его, если вы находитесь в деревьях выражений - но в специальном случае ноль проще.