一般的なページ区切りロジックを作成しようとしていることを前提としています。 DocDBでの私の経験から、Continuation Tokenを使ってページネーションを達成する必要があります。
私は一般的にトークンを言った後、私はそうのような後続の要求にそれを使用取得an extensionあります
/// <summary>
/// Paged results with continuation token
/// </summary>
/// <typeparam name="T"></typeparam>
public class PagedResults<T>
{
public PagedResults()
{
Results = new List<T>();
}
/// <summary>
/// Continuation Token for DocumentDB
/// </summary>
public string ContinuationToken { get; set; }
/// <summary>
/// Results
/// </summary>
public List<T> Results { get; set; }
}
/// <summary>
/// Creates a pagination wrapper with Continuation Token support
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="source"></param>
/// <returns></returns>
public static async Task<PagedResults<T>> ToPagedResults<T>(this IQueryable<T> source)
{
var documentQuery = source.AsDocumentQuery();
var results = new PagedResults<T>();
try
{
var queryResult = await documentQuery.ExecuteNextAsync<T>();
if (!queryResult.Any())
{
return results;
}
results.ContinuationToken = queryResult.ResponseContinuation;
results.Results.AddRange(queryResult);
}
catch
{
//documentQuery.ExecuteNextAsync might throw an Exception if there are no results
return results;
}
return results;
}
あなたはFeedOptionsと一緒にあなたのコード内でこのヘルパーを使用することができます。
var feedOptions = new FeedOptions() { MaxItemCount = sizeOfPage };
var collectionUri = UriFactory.CreateDocumentCollectionUri(DatabaseId, CollectionId);
PagedResults<T> results = await client.CreateDocumentQuery<T>(collectionUri,feedOptions).Where(predicate).ToPagedResults();
//You can check of the ContinuationToken and use it on another query
if(!string.IsNullOrEmpty(results.ContinuationToken)){
feedOptions.RequestContinuation = results.ContinuationToken;
PagedResults<T> moreResults = await client.CreateDocumentQuery<T>(collectionUri,feedOptions).Where(predicate).ToPagedResults();
}
をまた、Githubのが含まれているリポジトリをDocDB用に維持しています。必要に応じて自由に使用できます。ほとんどはPerformance guidelines articleと個人的な経験に基づいています。
もう1つのアドバイスは、SDKを.Net Full frameworkまたは.Net Coreバージョン(プロジェクトによって異なる)の最新バージョンにアップデートしてみてください。
'client'作成/初期化コードを追加できますか?あなたはそれをキャッシングしているか、毎回それを作り直していますか? –