1

最近我一直在使用 PredicateBuilder 类(如图所示)来帮助生成表达式树。提供的 True、And 和 Or 方法可以正常工作。但是,我也想使用 Not 方法,到目前为止,我的尝试让我得到了错误

Incorrect number of parameters supplied for lambda declaration.

这是说的尝试:

    public static Expression<Func<T, bool>> Not<T>(this Expression<Func<T, bool>> expr)
    {
        return Expression.Lambda<Func<T, bool>>
            (Expression.Not(Expression.Invoke(expr, expr.Parameters.Cast<Expression>())));
    }

有什么想法吗?
注意

4

1 回答 1

1

哎呀,差不多了。我没有给外部 .Lambda 函数提供参数:

    public static Expression<Func<T, bool>> Not<T>(this Expression<Func<T, bool>> expr)
    {
        return Expression.Lambda<Func<T, bool>>
            (Expression.Not(Expression.Invoke(expr, expr.Parameters.Cast<Expression>())), expr.Parameters);
    }
于 2012-12-04T14:52:00.883 回答