我正在创建一种方法,该方法使用IQueryable
方法的通用LINQ表达式向Where
添加过滤器。我想出了一个可以使用Equal
方法比较2个int值的方法:
public IQueryable<TEntity> CreateWhereExpression<TEntity>(IQueryable<TEntity> valueLeft, int valueLeft, int valueRight)
{
var type = typeof(TEntity);
var parameter = Expression.Parameter(type, "x");
var queryValueLeft = Expression.Constant(valueLeft);
var queryValueRight = Expression.Constant(valueRight);
var bodyExpression = Expression.Equal(queryValueLeft, queryValueRight); // Equal, GreaterThan, LessThan
var whereExpression = Expression.Lambda(bodyExpression, parameter);
var resultExpression = Expression.Call(typeof(Queryable), "Where",
new[] { type },
query.Expression,
whereExpression);
return query.Provider.CreateQuery<TEntity>(resultExpression);
}
我要替换的是为GreaterThan
和LessThan
创建一个过滤器:
var bodyExpression = Expression.Equal(queryValueLeft, queryValueRight);
变成这样(使用表达式):
var operationExpression = Expression.Call(typeof(Expression), "Equal" ... );
或
var operationExpression = Expression.Call(typeof(Expression), "GreaterThan" ... );
取决于操作。
我无法生成正确的表达式。这样做的原因是,该操作可以作为该方法的参数来使用,但是我不想使用已经完成但想要更改的if statements
或switch
。>
我该如何实现?