VB.Net Linq to Entities Null Comparison -«Ничего» или «= ничего»?

У нас есть несколько проектов в VB.Net, использующих.Net Framework 4 и Linq to Entities для многих наших SQL-запросов. Переход на EF — это новое изменение для нас (, мы используем его примерно 4 -6 месяцев )и пользуемся поддержкой высшего руководства, потому что мы можем кодировать гораздо быстрее. Мы по-прежнему используем много хранимых процессов, но даже выполняем их через Linq to Entities.

Я надеюсь прояснить некоторую путаницу, и я не могу найти прямой ответ, который имеет смысл. У нас есть несколько запросов, в которых нам нужны записи, в которых определенное поле имеет значение NULL. Это простые запросы на выборку, без агрегатов или левых объединений и т. д. Microsoft рекомендует, чтобы запрос выглядел примерно так Ссылка на MSDN:

dim query = from a in MyContext.MyTables
Where a.MyField = Nothing
Select a

У меня есть несколько проектов, где я делаю именно это, и это прекрасно работает, никаких предупреждений в IDE. Недавно другим разработчиком был создан новый проект, и когда он выполнил проверку нуля, как описано выше, мы все получили это предупреждение в среде IDE:

Предупреждение 1. Это выражение всегда будет оцениваться как Nothing (из-за распространения null от оператора равенства ). Чтобы проверить, является ли значение нулевым, рассмотрите возможность использования «Нет ничего».

При сравнении проектов для каждого из них включены опции «явно» и «строго». Если мы проигнорируем предупреждение, мы получим точный набор записей, который мы ищем, когда приложение запускается. Предупреждение исчезнет, ​​если я изменю знак = на IS. Но почему это предупреждение появилось в одном проекте, а не в другом? Это сбивает с толку, когда даже в MSDN есть примеры использования оператора равенства.

5
задан JaredPar 10 July 2012 в 18:55
поделиться