Одна возможность - если mt.PARENT_KEY
имеет какой-либо другой тип (например, long?
), тогда будут задействованы преобразования.
Это поможет, если вы можете показать задействованные типы и запрос, сгенерированный в каждом случае.
EDIT: Я думаю, что у меня есть идея ...
Это может быть потому, что SQL и C# имеют разные представления о том, что означает равенство, когда дело доходит до обнулить. Попробуйте это:
where (mt.PARENT_KEY == id) || (mt.PARENT_KEY == null && id == null)
Если является так, то это очень некрасиво угол так, но я могу понять, почему это сделано именно так ... если сгенерированный SQL просто использует
WHERE PARENT_KEY = @value
то, что не будет работать, если значение равно нулю - это необходимо:
WHERE (PARENT_KEY = @value) OR (PARENT_KEY IS NULL AND @value IS NULL)
, который является то, что последний запрос LINQ должен генерировать.
Из интереса, почему вы выбор с
select new { mt.NAME }
вместо просто
select mt.NAME
?) Почему вы хотите, последовательность анонимных типов вместо последовательности строк (или какой-либо тип NAME
?
Вы пробовали смотреть на SQL, сгенерированный в каждом случае? Какой тип mt.PARENT_KEY? –
родительский ключ является целым числом –
В сгенерированном коде? Nullable, Nullable ? –