var par = Expression.Parameter(typeof(string));
Expression<Predicate<string>> expression3 =
Expression.Lambda<Predicate<string>>(
Expression.AndAlso(
Expression.Invoke(expression1, par),
Expression.Invoke(expression2, par)),
par);
Predicate<string> method1 = expression3.Compile();
Console.WriteLine(method1("aaa"));
Console.WriteLine(method1("bbb"));
Console.WriteLine(method1("aaabbb"));
我们必须创造一个新的表达方式。par
是参数。然后我们使用Expression.Invoke
调用“旧”表达式(并par
作为它们的参数传递)。然后我们用Expression.AndAlso
来&&
表达。最后我们Expression.Lambda<Predicate<string>>
用来创建最终的表达式(最后一个参数,par
是lambda表达式的参数名)
请注意(常见错误),Expression.And
即&
,while Expression.AndAlso
is &&
(相同的Expression.Or*
)