Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq:创建表达式的逻辑逆_C#_Linq_Expression Trees - Fatal编程技术网

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);