private static IOrderedQueryable<T> Sort<T>(this IQueryable<T> queryable, SystemLinq.LambdaExpression lambdaExpression, MethodInfo methodInfo) { queryable.AssertNotNull(nameof(queryable)); var exp = lambdaExpression.CheckNotNull(nameof(lambdaExpression)).Body; var resultType = exp.Type; var funcType = typeof(Func<,>).MakeGenericType(typeof(T), resultType); var lambdaExpressionMethodInfo = MethodInfos.Expression.Lambda.MakeGenericMethod(funcType); var funcExpression = lambdaExpressionMethodInfo.Invoke(null, new object[] { exp, lambdaExpression.Parameters.ToArray() }); var method = methodInfo.MakeGenericMethod(typeof(T), resultType); var result = method.Invoke(null, new object[] { queryable, funcExpression! });