【发布时间】:2011-03-18 07:33:15
【问题描述】:
如何使用 OR 将两个 lambda 表达式合并为一个?
我尝试了以下方法,但合并它们需要我将参数传递到 Expression.Invoke 调用中,但是我希望将传递给新 lambda 的值传递给每个 child-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 的参数成为父 lambda 的参数?
【问题讨论】:
-
当你说“结合”时,你真正想要发生的事情是什么?假设传递的参数是
7-func1将返回 true,func2将返回 false。您希望组合返回什么?
标签: c# .net linq generics lambda