我想创建一个接受 Expression<Func<T, bool>>
的方法并创建它的逻辑逆(即它会返回 false
它会返回 true
,反之亦然。这比我想象的要难得多。这就是我要做的:
public static Expression<Func<T, bool>> Not<T>(this Expression<Func<T, bool>> expression)
{
return Expression.Lambda<Func<T, bool>>(Expression.Not(expression.Body));
}
这编译正常,但在调用时抛出以下异常:
Test method Tests.Common.Unit.LinqPredicateBuilderTests.CanInverseAPredicate threw exception:
System.ArgumentException: Incorrect number of parameters supplied for lambda declaration
我不知道我在做什么。谁能填空?
最佳答案
您正在调用 Expression.Lambda
当您应该转发源表达式的单个参数时,创建一个完全没有参数的表达式。
请注意,我们正在尝试创建一个 Expression<Func<T, bool>>
而不是 Expression<Func<bool>>
.
试试这个:
return Expression.Lambda<Func<T, bool>>(Expression.Not(expression.Body),
expression.Parameters);
关于c# - Linq:创建表达式的逻辑逆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8035287/