Linq:创建表达式的逻辑逆
我想创建一个接受 Expression
并创建它的逻辑逆的方法(即它将返回 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
我不知道我在做什么。任何人都可以填写。空白?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
当您应该转发源表达式的单个参数时,您正在调用
Expression.Lambda
来创建一个根本不带参数的表达式。请注意,我们正在尝试创建一个
Expression>
而不是Expression>
。试试这个:
You're calling
Expression.Lambda
to create an expression with no parameters at all, when you should be forwarding the single parameter of the source expression.Note that we are trying to create an
Expression<Func<T, bool>>
and not anExpression<Func<bool>>
.Try this instead: