static Expression <T> Compose <T>(this Expression <T> left, Expression <T> right, Func <Expression, Expression, Expression> merge) { var p1 = left.Parameters.First(); //Only handling with one parameter // replace parameters in the second lambda expression with the parameters in the first var rightBody = ParameterRebinder.Replaceparameter(p1, right.Body); // create a merged lambda expression with parameters from the first expression return(Expression.Lambda <T>(merge(left.Body, rightBody), left.Parameters)); }