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.AndAlsois &&(相同的Expression.Or*)