protected override Expression VisitMethodCall()

in src/Epam.GraphQL/Extensions/ExpressionExtensions.cs [533:559]


            protected override Expression VisitMethodCall(MethodCallExpression node)
            {
                if (node.Method.IsGenericMethod && node.Arguments.Count >= 2)
                {
                    var method = node.Method.GetGenericMethodDefinition();
                    var expr = node.Arguments[1].RemoveQuote();

                    if (method == CachedReflectionInfo.ForQueryable.GenericOrderBy || method == CachedReflectionInfo.ForQueryable.GenericOrderByWithComparer)
                    {
                        return AddSorter(node, expr, SortDirection.Asc, true);
                    }
                    else if (method == CachedReflectionInfo.ForQueryable.GenericOrderByDescending || method == CachedReflectionInfo.ForQueryable.GenericOrderByDescendingWithComparer)
                    {
                        return AddSorter(node, expr, SortDirection.Desc, true);
                    }
                    else if (method == CachedReflectionInfo.ForQueryable.GenericThenBy || method == CachedReflectionInfo.ForQueryable.GenericThenByWithComparer)
                    {
                        return AddSorter(node, expr, SortDirection.Asc, false);
                    }
                    else if (method == CachedReflectionInfo.ForQueryable.GenericThenByDescending || method == CachedReflectionInfo.ForQueryable.GenericThenByDescendingWithComparer)
                    {
                        return AddSorter(node, expr, SortDirection.Desc, false);
                    }
                }

                throw new ArgumentException($"Expression should not contain method calls except OrderBy, OrderByDescending, ThenBy and ThenByDescending. Call of {node.Method.Name} method was found.");
            }