public IQueryable <TSource> Sort <TSource>(
            IQueryable <TSource> source)
        {
            if (!SortOperations.Any())
            {
                return(source);
            }

            IOrderedQueryable <TSource> sortedSource;

            if (!OrderingMethodFinder.OrderMethodExists(source.Expression))
            {
                sortedSource = source.AddInitialSortOperation(
                    SortOperations.Dequeue());
            }
            else
            {
                sortedSource = (IOrderedQueryable <TSource>)source;
            }

            while (SortOperations.Any())
            {
                sortedSource
                    = sortedSource.AddSortOperation(
                          SortOperations.Dequeue());
            }

            return(sortedSource);
        }
        public override VisitorAction Enter(
            ObjectFieldNode node,
            ISyntaxNode parent,
            IReadOnlyList <object> path,
            IReadOnlyList <ISyntaxNode> ancestors)
        {
            base.Enter(node, parent, path, ancestors);

            if (Operations.Peek() is SortOperationField sortField)
            {
                Closure.EnqueueProperty(sortField.Operation.Property);
                if (!sortField.Operation.IsObject)
                {
                    var kind = (SortOperationKind)sortField.Type.Deserialize(node.Value.Value);
                    SortOperations.Enqueue(CreateSortOperation(kind));
                }
            }

            return(VisitorAction.Continue);
        }
예제 #3
0
        public IQueryable <TSource> Sort <TSource>(
            IQueryable <TSource> source)
        {
            if (!SortOperations.Any())
            {
                return(source);
            }

            IOrderedQueryable <TSource> sortedSource
                = source.AddInitialSortOperation(
                      SortOperations.Dequeue());

            while (SortOperations.Any())
            {
                sortedSource
                    = sortedSource.AddSortOperation(
                          SortOperations.Dequeue());
            }

            return(sortedSource);
        }