如何在表达式树中“捕获”字符串变量,而不是使用常量?

时间:2019-02-21 09:43:42

标签: c# entity-framework expression-trees

我正在使用此方法动态构建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作为参数“捕获”吗?

0 个答案:

没有答案