/// <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
     });
 }
Beispiel #2
0
        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));
        }