public Uri GetNextPageLinkNavigation(Db.IOeDbEnumerator dbEnumerator, int readCount, long?totalCount, Object value) { OeEntryFactory entryFactory = dbEnumerator.EntryFactory; ExpandedNavigationSelectItem navigationSelectItem = entryFactory.NavigationSelectItem; if (navigationSelectItem.GetPageSize() == 0 || readCount == 0 || (totalCount != null && readCount >= totalCount)) { return(null); } OrderByClause orderByClause = OeSkipTokenParser.GetUniqueOrderBy(entryFactory.EntitySet, navigationSelectItem.OrderByOption, null); KeyValuePair <String, Object>[] keys = GetNavigationSkipTokenKeys(entryFactory, orderByClause, value); int restCount = GetRestCountNavigation((int?)navigationSelectItem.TopOption, readCount, totalCount); String skipToken = OeSkipTokenParser.GetSkipToken(_queryContext.EdmModel, keys, restCount); return(GetNavigationUri(dbEnumerator.ParentEnumerator.EntryFactory, navigationSelectItem, orderByClause, dbEnumerator.ParentEnumerator.Current, skipToken)); }
private Uri GetNavigationUri(OeEntryFactory entryFactory, ExpandedNavigationSelectItem item, OrderByClause orderByClause, Object value, String skipToken) { bool?queryCount = item.CountOption; long?top = item.TopOption; if (skipToken != null) { queryCount = null; int pageSize = item.GetPageSize(); if (pageSize > 0 && (top == null || pageSize < top.GetValueOrDefault())) { top = pageSize; } } FilterClause filterClause = GetFilter(_queryContext.EdmModel, entryFactory, item, value); if (filterClause == null) { return(null); } var entitytSet = (IEdmEntitySet)(filterClause.RangeVariable as ResourceRangeVariable).NavigationSource; var pathSegments = new ODataPathSegment[] { new EntitySetSegment(entitytSet) }; var odataUri = new ODataUri() { Filter = filterClause, OrderBy = orderByClause, Path = new ODataPath(pathSegments), QueryCount = queryCount, SelectAndExpand = item.SelectAndExpand, Skip = item.SkipOption, SkipToken = skipToken, Top = top }; return(odataUri.BuildUri(ODataUrlKeyDelimiter.Parentheses)); }