如何使用 OR 将两个 lambda 表达式合并为一个?
我已尝试以下操作,但合并它们需要我将参数传递到表达式.调用调用,但是我希望将传递到新 lambda 的值传递到每个子 lambda 上。
Expression<Func<int, bool>> func1 = (x) => x > 5;
Expression<Func<int, bool>> func2 = (x) => x < 0;
//Combines the lambdas but result in runtime error saying I need to pass in arguments
//However I want the argument passed into each child lambda to be whatever is passed into the new main lambda
Expression<Func<int, bool>> lambda = Expression.Lambda<Func<int, bool>>(Expression.Or(Expression.Invoke(func1), Expression.Invoke(func2)));
//The 9 should be passed into the new lambda and into both child lambdas
bool tst = lambda.Compile().Invoke(9);
有什么想法如何将两个 lambda 表达式合并为一个并使子 lambda 的参数成为父表达式的参数吗?
我发现学习表达式的最好方法是查看源代码谓词生成器.
当您想要合并多个语句时,您可以:
Expression<Func<int, bool>> func1 = (x) => x > 5;
Expression<Func<int, bool>> func2 = (x) => x > 10;
var invocation = Expression.Invoke(func2, func1.Parameters.Cast<Expression>());
var expression = Expression.Lambda<Func<int, bool>>(Expression.OrElse(func1.Body, invocation), func1.Parameters);
The Expression.Invoke
创建一个将参数应用到您的调用表达式func2
.
事实上,PredicateBuilder 可能就是您所需要的一切。
var predicate = PredicateBuilder.False<int>();
predicate = predicate.Or(x => x > 5);
predicate = predicate.Or(x => x > 10);
我会修改“x > 5
or x > 10
”,对于 OR 来说似乎是一件奇怪的事情。
希望有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)