コード例 #1
0
        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());
        }
コード例 #2
0
        /// <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());
        }
コード例 #3
0
        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>();
        }
コード例 #4
0
        /// <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));
        }