LINQ在C#中为Equals,GreaterThan,LessThan创建通用lambda表达式

时间:2018-12-14 11:11:43

标签: c# linq

我正在创建一种方法,该方法使用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);
}

我要替换的是为GreaterThanLessThan创建一个过滤器:

var bodyExpression = Expression.Equal(queryValueLeft, queryValueRight);

变成这样(使用表达式):

var operationExpression = Expression.Call(typeof(Expression), "Equal" ... );

var operationExpression = Expression.Call(typeof(Expression), "GreaterThan" ... );

取决于操作。

我无法生成正确的表达式。这样做的原因是,该操作可以作为该方法的参数来使用,但是我不想使用已经完成但想要更改的if statementsswitch

我该如何实现?

0 个答案:

没有答案