C# in a Nutshell 有一个名为 PredicateBuilder 的免费类,它可以在此处逐段构造 LINQ 谓词。这是向谓词添加新表达式的方法的摘录。有人可以解释一下吗?(我已经看到了这个问题,我不想要像那里那样的一般性答案。我正在寻找关于 Expression.Invoke 和 Expression.Lambda 如何构建新表达式的具体解释)。
public static Expression<Func<T, bool>> And<T> (this Expression<Func<T, bool>> expr1,
Expression<Func<T, bool>> expr2)
{
var invokedExpr = Expression.Invoke (expr2, expr1.Parameters.Cast<Expression> ());
return Expression.Lambda<Func<T, bool>>
(Expression.AndAlso (expr1.Body, invokedExpr), expr1.Parameters);
}