Добавление WHERE в простой запрос LINQ возвращает ноль результатов (но не должно) - PullRequest
1 голос
/ 02 октября 2011

У меня следующий запрос:

var Query = db.ReportCommon
              .Where(x => x.ReportType == category)
              .Where(x => x.ReportDateTime >= dateStart)
              .Where(x => x.ReportDateTime < dateEnd);

category - это переменная, которую я передаю (т. Е. «Short», «Standard» и т. Д.); dateStart и dateEnd являются значениями DateTime.

Этот запрос возвращает ожидаемые результаты (примерно 300 с лишним).

Но когда я добавляю следующую строку, я получаю ноль результатов, тогда как в действительности я должен получить примерно на 2 или 3 меньше результатов:

              .Where(x => x.PartnerRef.ToUpper() != "TEST");

Существует только около 3 записей, в которых поле PartnerRef содержит «Test», «test» или «TEST», остальные поля имеют значение NULL или содержат разные партнерские ссылки (например, «DSW»).

Почему это происходит и как я могу это исправить?

Ответы [ 4 ]

1 голос
/ 02 октября 2011

Вам нужно проверить сгенерированный SQL, но в терминах SQL NULL! = "TEST" оценивается как UNKNOWN, а не TRUE, и поэтому эти результаты не будут возвращены.

Возможно, вы надеетесь, что EFдостаточно умен, чтобы обнаружить эту ловушку и отправить пустые проверки в SQL, но, учитывая все в вашем вопросе, может показаться, что это не так.

Не могу объяснить, почему не возвращаются другие значения PartnerRef- все это указывает на какой-то другой внешний фактор, который вы не определили в вопросе.

1 голос
/ 02 октября 2011

Вы уверены, что значения category, dateStart и dateEnd совпадают?

Также, если вы используете

.Where(x => x.PartnerRef.ToUpper() == "TEST");

Вы получаете 2 или 3 записи, которые ожидаете?

Вы также можете попробовать запустить это в LINQPad , что позволит вам поэкспериментировать и увидеть SQL, который генерирует EF.

0 голосов
/ 02 октября 2011

LINQ для баз данных не нуждается в .ToUpper, потому что запросы SQL не чувствительны к региструВы можете попробовать профилировать сгенерированный SQL, чтобы выяснить, почему ваш запрос не выполняется.Опубликуйте свой SQL, если вам все еще нужна помощь.

0 голосов
/ 02 октября 2011

Я не уверен, что происходит с вашим кодом. Однако если в определенной записи «PartnerRef» имеет значение null, то PartnerRef.ToUpper () выдаст исключение нулевой ссылки.

Может быть, вы где-то обрабатываете это исключение, но результат остается пустым, потому что запрос так и не был выполнен?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...