我有这段代码用于从数据库中获取和过滤产品结果:
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查询参数表达式时引发了异常。要显示其他信息,请在覆盖DbContext.OnConfiguring时调用EnableSensitiveDataLogging()。
System.NullReferenceException:对象引用未设置为实例 一个对象。
在lambda_method(关闭)
在Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.Internal.ParameterExtractingExpressionVisitor.Evaluate(Expression expression,String&parameterName)。
有人知道解决方案吗?请帮助
答案 0 :(得分:0)
这很简单,您的错误解释了它。 userParams.MaxPrice
为空。因此,您需要向其添加null检查。一种简单的方法是将查询更改为:
if (userParams.MinPrice > 0 && userParams.MaxPrice != null && userParams.MaxPrice != 999999999)
{
products = products.Where(p => (p.Price >= userParams.MinPrice) &&
(p.Price <= userParams.MaxPrice));
}
尽管根据您的逻辑,您可能需要稍作更改。关键是不要假定某个属性具有值,如果该值可以为空,则需要首先验证它是否不为空,然后进行检查。
还应该补充一点,假设这是一个可为null的int或类似内容,理论上您可以做userParams.MaxPrice.GetValueOrDefault() != 999999999
。