C #in a Nutshell имеет бесплатный класс PredicateBuilder, который создает предикаты LINQ по частям, доступные здесь . Вот выдержка из метода, который добавляет новое выражение к предикату. Может ли кто-нибудь объяснить это? (Я видел этот вопрос , мне не нужен такой общий ответ, как здесь. Я ищу конкретное объяснение того, как Expression.Invoke и Expression.Lambda строят новое выражение ).
public static Expression> And (this Expression> expr1,
Expression> expr2)
{
var invokedExpr = Expression.Invoke (expr2, expr1.Parameters.Cast ());
return Expression.Lambda>
(Expression.AndAlso (expr1.Body, invokedExpr), expr1.Parameters);
}