public static MethodCallExpression WrapInAverageSum(this MethodCallExpression node, MethodCallExpression wrap) { Check.NotNull(node, nameof(node)); Check.NotNull(wrap, nameof(wrap)); Type selectorType = wrap.GetSelectorType(); Type queryableType = typeof(IQueryable <>).MakeGenericType(selectorType); MethodInfo numberMethod = typeof(Queryable).GetMethod(wrap.Method.Name, new [] { queryableType }); return(Expression.Call(numberMethod, node)); }
public static MethodCallExpression WrapInSelect(this MethodCallExpression node, MethodCallExpression selectorNode) { Check.NotNull(node, nameof(node)); Type selectorType = selectorNode.GetSelectorType(); Type[] genericArgumentTypes = node.Method .GetGenericArguments() .Append(selectorType) .ToArray(); return(Expression.Call(typeof(Queryable), nameof(Queryable.Select), genericArgumentTypes, node, selectorNode.Arguments[1])); }