ТЛ; др
Если вы используете DbContext в EF6, это исправлено.
Если вы используете EF5 (или ObjectContext в EF6), вам нужно установить для ObjectContext.ContextOptions.UseCSharpNullComparisonBehavior значение true. Для этого на DbContext используйте это:
((IObjectContextAdapter)db).ObjectContext.ContextOptions.UseCSharpNullComparisonBehavior = true;
.
Подробнее
Основной причиной этой проблемы является различие в том, как база данных сравнивает нулевые значения и как C # сравнивает нулевые значения. Поскольку вы пишете свой запрос в C #, вы хотите использовать семантику C #.
В EF5 мы ввели ObjectContext.ContextOptions.UseCSharpNullComparisonBehavior, который позволил вам использовать семантику C # вместо семантики базы данных. По умолчанию используется значение false (чтобы существующие запросы волшебным образом не начинали возвращать разные результаты при обновлении до EF5). Но вы можете установить его в true, и оба ваших запроса будут возвращать строки.
Если вы используете DbContext в EF5, вам нужно перейти в ObjectContext, чтобы установить его:
((IObjectContextAdapter)db).ObjectContext.ContextOptions.UseCSharpNullComparisonBehavior = true;
Если вы используете EF6, то для DbContext оно уже установлено в значение true, так что вы готовы. Мы решили, что это вызывает столько путаницы, что стоит принять потенциальное влияние на существующие запросы.