Entity Framework выдает ошибку при выполнении лямбда-выражения - PullRequest
0 голосов
/ 20 января 2019

У меня есть этот фрагмент кода для извлечения и фильтрации результатов продуктов из базы данных:

if (userParams.MinPrice > 0 && userParams.MaxPrice != 999999999) 
{
    products = products.Where(p => (p.Price >= userParams.MinPrice) && 
                                   (p.Price <= userParams.MaxPrice));
}

Это выполняется успешно, когда предоставляется только userParams.MinPrice, но завершается ошибкой, когда предоставляется userParams.MaxPrice.

Я получаю следующую ошибку:

Произошло необработанное исключение при выполнении запроса.

System.InvalidOperationException: Возникла исключительная ситуация при попытке выполнитьоценить выражение параметра запроса LINQ.Чтобы показать дополнительную информацию, вызовите EnableSensitiveDataLogging () при переопределении DbContext.OnConfiguring.

System.NullReferenceException: ссылка на объект не установлена ​​для экземпляра объекта.

в lambda_method (закрытие)
в Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.Internal.ParameterExtractingExpressionVisitor.Evaluate (выражение-выражение, String & parameterName).

знает ли кто-нибудь решениек этому?Пожалуйста, помогите

1 Ответ

0 голосов
/ 20 января 2019

Это довольно просто, ваша ошибка объясняет это.userParams.MaxPrice равно нулю.Так что вам нужно добавить проверку на ноль к нему.Простым способом было бы изменить ваш запрос на:

if (userParams.MinPrice > 0 && userParams.MaxPrice != null && userParams.MaxPrice != 999999999) 
{
    products = products.Where(p => (p.Price >= userParams.MinPrice) && 
                                   (p.Price <= userParams.MaxPrice));
}

Хотя, в зависимости от вашей логики, вам может потребоваться немного изменить ситуацию.Ключевой момент заключается в том, чтобы не предполагать, что свойство имеет значение, если оно имеет значение NULL, то вам нужно сначала проверить, что оно не равно NULL, а затем проверить его.что это обнуляемый int или что-то в этом роде.

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