private async Task <ContentSummaries> GetContentSummariesAsync(int limit, string continuationToken, QueryDefinition queryDefinition) { FeedIterator <ContentSummary> iterator = this.container.GetItemQueryIterator <ContentSummary>(queryDefinition, continuationToken, new QueryRequestOptions { MaxItemCount = limit }); var summaries = new ContentSummaries(); if (iterator.HasMoreResults) { FeedResponse <ContentSummary> results = await iterator.ReadNextAsync().ConfigureAwait(false); summaries.ContinuationToken = results.ContinuationToken; summaries.Summaries.AddRange(results.Resource); } return(summaries); }
/// <inheritdoc/> public async Task <List <ContentSummary> > GetContentSummariesForStatesAsync(IList <ContentState> states) { // All of the states should have the same slug. if (states.Distinct(x => x.Slug).Count() != 1) { throw new ArgumentException("All of the supplied states should be for the same content slug.", nameof(states)); } var queryBuilder = new StringBuilder("SELECT "); queryBuilder.Append(ContentSummaryProperties); queryBuilder.Append(" FROM c WHERE c.slug = @slug AND c.contentType = '"); queryBuilder.Append(Content.RegisteredContentType); queryBuilder.Append("' AND ARRAY_CONTAINS(["); IList <string> contentIds = states.Select(s => s.ContentId).Distinct().ToList(); Enumerable.Range(0, contentIds.Count).ForEach(i => { queryBuilder.Append("@id"); queryBuilder.Append(i); if (i < contentIds.Count - 1) { queryBuilder.Append(", "); } }); queryBuilder.Append("], c.id)"); QueryDefinition queryDefinition = new QueryDefinition(queryBuilder.ToString()) .WithParameter("@slug", states[0].Slug); contentIds.ForEachAtIndex((s, i) => queryDefinition = queryDefinition.WithParameter($"@id{i}", s)); ContentSummaries summaries = await this.GetContentSummariesAsync(states.Count, null, queryDefinition).ConfigureAwait(false); return(summaries.Summaries); }