public async Task <PagedQueryResult <KeyValuePair <Key, Value>, Continuation> > Query(Range <string> partitionRange, Range <string> rowRange, int?pageSize = null, Continuation continuationToken = null) { if ((pageSize ?? 1) <= 0) { throw new ArgumentOutOfRangeException(paramName: nameof(pageSize)); } if ((PageSizeLimit ?? int.MaxValue) < (pageSize ?? 1)) { throw new ArgumentOutOfRangeException(paramName: nameof(pageSize), message: "Too many records requested"); } var filter = TableQuery.CombineFilters( RangeFilter(nameof(ITableEntity.RowKey), rowRange), TableOperators.And, RangeFilter(nameof(ITableEntity.PartitionKey), partitionRange)); var query = new TableQuery <DynamicTableEntity> { TakeCount = pageSize, }.Where(filter); var actualToken = ContinuationToken.Deserialize(continuationToken); var page = await this.table.ExecuteQuerySegmentedAsync(query, actualToken).ConfigureAwait(false); var results = page.Results.Select(entity => new KeyValuePair <Key, Value>( key: new Key(partition: KeyDecode(entity.PartitionKey), row: KeyDecode(entity.RowKey)), value: ParseValue(entity) )).ToArray(); var serializedContinuation = ContinuationToken.Serialize(page.ContinuationToken); return(new PagedQueryResult <KeyValuePair <Key, Value>, Continuation>(results, serializedContinuation)); }