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); }
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); }