gpt4 book ai didi

C# 否定一个表达式

转载 作者:IT王子 更新时间:2023-10-29 04:39:18 28 4
gpt4 key购买 nike

我正在寻找一种方法来否定用于过滤 IQueryable 序列的表达式。

所以,我有类似的东西:

Expression<Func<T, bool>> expression = (x => true);

现在我希望创建会导致产生 (x => false) 的表达式 - 所以我基本上想否定 expression

我发现自己的工作方法是这样的:

var negatedExpression = 
Expression.Lambda<Func<T, bool>> (Expression.Not(expression.Body),
expression.Parameters[0])));

但我几乎可以肯定有更好的方法 - 你能帮帮我吗?(可能类似于 Not(expression))。

最佳答案

一个简单的扩展方法:

public static Expression<Func<T, bool>> Not<T>(this Expression<Func<T, bool>> one)
{
var candidateExpr = one.Parameters[0];
var body = Expression.Not(one.Body);

return Expression.Lambda<Func<T, bool>>(body, candidateExpr);
}

用法:

Expression<Func<int, bool>> condition = x => x > 5;
var source = Enumerable.Range(1, 10);
var result1 = source.Where(condition.Compile()); //6,7,8,9,10
var result2 = source.Where(condition.Not().Compile()); //1,2,3,4,5

关于C# 否定一个表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4417430/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com