/// <summary> /// 拼接两个 <paramref> /// <name>System.Linq.Expression</name> /// </paramref> /// ,两个 <paramref> /// <name>System.Linq.Expression</name> /// </paramref> /// 的参数必须完全相同。 /// </summary> /// <param name="left">左边的 <paramref> /// <name>System.Linq.Expression</name> /// </paramref> /// </param> /// <param name="right">右边的 <paramref> /// <name>System.Linq.Expression</name> /// </paramref> /// </param> /// <param name="func">表达式拼接的具体逻辑</param> /// <returns>拼接完成的 <paramref> /// <name>System.Linq.Expression</name> /// </paramref> /// </returns> public static LambdaExpression MakeBinary(this LambdaExpression left, LambdaExpression right, Func <Expression, Expression, Expression> func) { if (right?.Body == null) { throw new ArgumentNullException(nameof(right)); } var data = Combinate(right.Parameters, left.Parameters).ToArray(); right = ParameterReplace.Replace(right, data) as LambdaExpression; return(Expression.Lambda(func(left.Body, right.Body), left.Parameters.ToArray())); }
public static Expression Replace(Expression e, IEnumerable <KeyValuePair <ParameterExpression, ParameterExpression> > paramList) { var item = new ParameterReplace(paramList); return(item.Visit(e)); }