private List <T> GetEdgesToReturn( IQueryable <T> allEdges, QueryablePagingDetails pagingDetails, out int offset) { IQueryable <T> edges = ApplyCursorToEdges( allEdges, pagingDetails.Before, pagingDetails.After); offset = 0; if (pagingDetails.After.HasValue) { offset = pagingDetails.After.Value + 1; } if (pagingDetails.First.HasValue) { edges = GetFirstEdges( edges, pagingDetails.First.Value, ref offset); } if (pagingDetails.Last.HasValue) { edges = GetLastEdges( edges, pagingDetails.Last.Value, ref offset); } return(edges.ToList()); }
/// <summary> /// Get paging edgess /// </summary> /// <param name="allEdges">Edges</param> /// <param name="pagingDetails">Paging details</param> /// <returns>List of edges</returns> private List <T> GetEdgesToReturn(IQueryable <T> allEdges, QueryablePagingDetails pagingDetails) { IQueryable <T> edges = ApplySkipTakeToEdges(allEdges, pagingDetails.Limit, pagingDetails.Offset); return(edges.ToList()); }
public QueryableConnectionResolver(IQueryable <T> source, PaginationDetails paginationDetails) { if (paginationDetails == null) { throw new ArgumentNullException(nameof(paginationDetails)); } _source = source ?? throw new ArgumentNullException(nameof(source)); _pageDetails = DeserializePagingDetails(paginationDetails); _properties = paginationDetails.Properties ?? new Dictionary <string, object>(); }
/// <summary> /// Creates a connection object /// </summary> /// <returns>Connection</returns> private Connection <T> Create() { if (!_pageDetails.TotalCount.HasValue) { _pageDetails.TotalCount = _source.Count(); } _properties[_totalCount] = _pageDetails.TotalCount.Value; IReadOnlyList <QueryableEdge <T> > selectedEdges = GetSelectedEdges(); var pageInfo = new QueryablePagingDetails(_pageDetails.TotalCount, _pageDetails.PageNumber, _pageDetails.Limit); return(new Connection <T>(pageInfo, selectedEdges)); }