表达式树 - 用和连接2个表达式

时间:2011-01-17 11:54:19

标签: c# .net expression-trees

我需要实现一个在2个表达式树上生成的方法。像这样:

public Expression<Func<TEntity, bool>> And(Expression<Func<TEntity, bool>> ex1, 
                                           Expression<Func<TEntity, bool>> ex2)
{
    return Expression.And(ex1, ex2); 
}

在这种情况下,返回类型不是我需要的Expression<Func<TEntity, bool>> 怎么做我需要的?
提前谢谢!

2 个答案:

答案 0 :(得分:2)

非最佳解决方案(未经测试):

public Expression<Func<TEntity, bool>> And(Expression<Func<TEntity, bool>> ex1, 
                                           Expression<Func<TEntity, bool>> ex2)
{
  var x = Expression.Parameter(typeof(TEntity));
  return Expression.Lambda<Func<TEntity,bool>>(
    Expression.And(
      Expression.Invoke(ex1, x),
      Expression.Invoke(ex2, x)), x); 
}

答案 1 :(得分:1)

public Expression<Func<TEntity, bool>> And(Expression<Func<TEntity, bool>> ex1, 
                                           Expression<Func<TEntity, bool>> ex2)
{
    var parameter = Expression.Parameter(typeof(TEntity));
    return Expression.Lambda<Func<TEntity, bool>>(  
               Expression.And(
                   Expression.Invoke(ex1, parameter), 
                   Expression.Invoke(ex2, parameter)), 
           parameter); 
}

请注意,除非您压缩Invokes,否则这不适用于Entity Framework。用于实施的Google InvocationExpander。