/// <summary> /// Convert a base64 string to a continuation token. /// </summary> /// <param name="query">The <see cref="IContinuationQuery"/> to use.</param> /// <returns>A <see cref="LimitOffsetContinuationToken"/>.</returns> public static LimitOffsetContinuationToken FromContinuationQuery(IContinuationQuery query) { return(ContinuationToken.FromContinuationToken <LimitOffsetContinuationToken>(query.ContinuationToken) ?? new LimitOffsetContinuationToken { Limit = query.Limit }); }
public static IContinuationEnumerable <TEntity> ToContinuationEnumerable <TEntity>(this IEnumerable <TEntity> values, IContinuationQuery continuationQuery) { if (values is null) { throw new ArgumentNullException(nameof(values)); } if (continuationQuery is null) { throw new ArgumentNullException(nameof(continuationQuery)); } var pagination = LimitOffsetContinuationToken.FromContinuationQuery(continuationQuery); var paginatedResults = values .Select(x => new { Item = x, TotalCount = values.Count(), }) .Skip(pagination.Offset) .Take(pagination.Limit) .ToArray(); var totalCount = paginatedResults.FirstOrDefault()?.TotalCount ?? 0; var items = paginatedResults.Select(x => x.Item).ToList(); return(new ContinuationEnumerable <TEntity>( items, (items.Count + pagination.Offset) < totalCount ? pagination.GetNextPageContinuationToken() : null)); }