コード例 #1
0
        private static MethodCallExpression Apply(string methodName, Expression source, Expression argument = null)
        {
            var result = Expression.Call(
                type: typeof(Queryable),
                methodName: methodName,
                typeArguments: methodName == "Select" || methodName.StartsWith("OrderBy", StringComparison.Ordinal)
                    ? source.Type.GetGenericArguments(typeof(IQueryable <>))
                .Concat(new[] { ((LambdaExpression)LinqHelpers.UnQuote(argument)).ReturnType })
                .ToArray()
                    : source.Type.GetGenericArguments(typeof(IQueryable <>)),
                arguments: argument != null
                    ? new[] { source, argument }
                    : new[] { source }
                );

            return(result);
        }