public static async Task <PagedListResult <TOutput> > PaginateListResultAsync <TInput, TOutput>(
            this Microsoft.Azure.Cosmos.Table.CloudTable table,
            Microsoft.Azure.Cosmos.Table.TableQuery <TInput> query,
            int pageSize,
            Func <TInput, Task <TOutput> > conversion,
            CosmosTableBasedContinuationToken continuationToken,
            CancellationToken cancelationToken = default(CancellationToken))
            where TInput : Microsoft.Azure.Cosmos.Table.ITableEntity, new()
        {
            var items = new List <TOutput>();
            var token = continuationToken.IsContinuation ? continuationToken.TableCursor : null;
            var oc    = new Microsoft.Azure.Cosmos.Table.OperationContext();
            var ro    = new Microsoft.Azure.Cosmos.Table.TableRequestOptions();

            query = query.Take(pageSize);

            var seg = await table.ExecuteQuerySegmentedAsync(query, token, ro, oc, cancelationToken);

            continuationToken.TableCursor = seg.ContinuationToken;
            items.AddRange(
                (await Task.WhenAll(seg.Select(async x => await conversion(x))))
                .Where(x => x != null)
                );

            return(new PagedListResult <TOutput> {
                Items = items, ContinuationToken = continuationToken?.ToString()
            });
        }
Example #2
0
        public async Task <PagedListResult <FeatureDetail> > GetFeatures(string continuationToken)
        {
            if (newGates_)
            {
                var table = featureStore_.Value.Storage;
                var query = new Microsoft.Azure.Cosmos.Table.TableQuery <FeatureEntryTableEntity>()
                            .Where(Microsoft.Azure.Cosmos.Table.TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, FeatureGateStore.GatePartitionKey));
                var token = new CosmosTableBasedContinuationToken(continuationToken);

                return(await table.PaginateListResultAsync(query, 30, x => Task.FromResult(x.To <FeatureEntry>().ToFeatureDetail()), token));
            }
            else
            {
                var table = featureStore_.Value.GatesTable.Table;
                var query = new TableQuery <LegacyFeatureEntry>()
                            .Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, FeatureGateStore.GatePartitionKey));
                var token = new CloudTableBasedContinuationToken(continuationToken);

                return(await table.PaginateListResult(query, x => x.ToFeatureDetail(), token));
            }
        }