如何制作PredicateBuilder

时间:2012-12-04 14:41:29

标签: c# lambda expression

最近我一直在使用PredicateBuilder类(shown here)来帮助生成表达式树。提供的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>())));
    }

有什么想法?
NB

1 个答案:

答案 0 :(得分: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);
    }