我正在使用此方法动态构建Expression<Func<T, bool>>
中使用的IQueryable.Where()
private Expression<Func<TSource, bool>> EqualToExpression<TSource, TValue>(
Expression<Func<TSource, TValue>> selectValue,
TValue targetValue)
{
return Expression.Lambda<Func<TSource, bool>>(
Expression.Equal(
selectValue.Body,
Expression.Constant(targetValue)),
selectValue.Parameters);
}
我这样使用(简化示例):
var query = this.Context.Set<Car>();
string makeFilter = "BMW";
Expression<Func<Car, string>> makeProperty = (x) => x.Make;
query = query.Where(EqualToExpression(makeProperty , makeFilter));
该查询随后由EF Core执行,并且有效。
问题在于EF Core将targetValue
视为常量,然后将值硬编码到SQL中,而不是将其作为查询的参数。
我可以更改我的EqualToExpression
方法,以便将targetValue
作为参数“捕获”吗?