Я не смог найти точных слов, чтобы объяснить, что происходит, поэтому, если это дублированный вопрос, я извиняюсь.
Я попытался выполнить довольно простое условие AND if-clause внутри запроса LINQ, чтобы проверить, является ли объект нулевым, а затем проверить, равно ли его свойство столбцу, который я хотел сравнить, или нет.
Код:
public IEnumerable<Plan> GetPlans(Plan plan)
{
return _context.Plans.Where(e =>
e.Situation == plan.Situation &&
e.Notes.Contains(plan.Notes) &&
(plan.Excercise != null && plan.Exercise.Year > 0 ? e.Exercise.Year == plan.Exercise.Year: true)).ToList();
}
Я уже делал такую проверку десятки раз в .NET 4.5, и у меня не было никаких проблем.
Но теперь, в первом проекте .NET Core 2.0, над которым я работаю, у меня возникла следующая ошибка:
An exception was thrown while attempting to evaluate a LINQ query parameter expression. To show additional information call EnableSensitiveDataLogging() when overriding DbContext.OnConfiguring.
Внутреннее исключение более понятно: NULL REFERENCE EXCEPTION.
После некоторых тестов я обнаружил, что ошибка возникает, когда plan.Exercise становится нулевым, даже если я пытаюсь избежать исключения, сначала проверяя, является ли оно нулевым или нет.
Если я попытаюсь сделать ту же проверку непосредственно в Immediate Window, она вернет «false», как и должно быть.
Я что-то упустил здесь? Это может быть ошибка EF? Есть ли конкретная причина, по которой это работает, например, в .NET 4.5, а не в .NET Core 2.0?
Заранее спасибо.
ОБНОВИТЬ
Решение Ивана сделало работу:
Переписать? : конструкции с эквивалентом ||
plan.Excercise == null || plan.Exercise.Year <= 0 || e.Excercise.Year == plan.Exercise.Year