Дерево выражений - объедините 2 выражения с и - PullRequest
2 голосов
/ 17 января 2011

Мне нужно реализовать метод, который составляет и на 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 ]

2 голосов
/ 17 января 2011

Неоптимальное решение (не проверено):

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 голос
/ 17 января 2011
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); 
}

Обратите внимание, что это не будет работать с Entity Framework, если вы не сократите вызовы.Google InvocationExpander для реализации.

...