C# Linq:创建表达式的逻辑逆
我想创建一个方法,它接受一个C# Linq:创建表达式的逻辑逆,c#,linq,expression-trees,C#,Linq,Expression Trees,我想创建一个方法,它接受一个表达式,并创建它的逻辑逆(即,它将返回false,返回true,反之亦然)。这比我想象的要困难得多。这就是我要做的: public static Expression<Func<T, bool>> Not<T>(this Expression<Func<T, bool>> expression) { return Expression.Lambda<Func<T, bool>>(E
表达式
,并创建它的逻辑逆(即,它将返回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));
}
我不知道我在做什么。有人可以填空吗?您正在调用
Expression.Lambda
创建一个完全没有参数的表达式,而此时您应该转发源表达式的单个参数
请注意,我们正在尝试创建一个表达式
,而不是表达式
请尝试以下方法:
return Expression.Lambda<Func<T, bool>>(Expression.Not(expression.Body),
expression.Parameters);
返回Expression.Lambda(Expression.Not(Expression.Body),
表达式(参数);
inverse有点误导人。我理解这是从输出计算输入。很抱歉,我的术语不是很快。谢谢!到目前为止,这已经通过了我唯一的单元测试!我将再写几篇,如果一切顺利,我会给你应得的!这与从IQueryable
?@cottsak:你能澄清一下你的意思吗?IQueryable
对“逆”没有任何直观的定义。当然,你可以在构造查询表的过程中使用上述技术来反转where
子句或类似的内容。嗨,安尼。在评论之后,我进一步考虑了这一点,我认为ink我试图将表达式树与IQueryable
进行比较,而不是将单个表达式lambda进行比较。如果表达式树是谓词的集合,那么IQueryable
本质上也是吗?让我开心吧!谢谢
return Expression.Lambda<Func<T, bool>>(Expression.Not(expression.Body),
expression.Parameters);