我在azure documentDB平台的c#中开发.我尝试在我的应用程序中实现分页体系结构.我的代码:
var userQuery = _client.CreateDocumentQuery<User>(
_uriUsersCollection, queryStr, options).AsDocumentQuery();
Run Code Online (Sandbox Code Playgroud)
我的代码在AsDocumentQuery()函数上显示错误(它不被识别为IQueryable方法的一部分(我在互联网上看到该函数识别的几个例子).所以当我尝试激活查询时.ExecuteNextAsync它不存在.我使用Microsoft.Azure.Documents.Client dll版本1.11.0.0.感谢您的帮助MAK
对于带有Continuation Token的场景,我经常使用这个助手类:
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; }
}
Run Code Online (Sandbox Code Playgroud)
有了这个扩展:
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 throws an Exception if there are no results
return results;
}
return results;
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以在代码中或多或少地使用它:
var options = new FeedOptions() { MaxItemCount = 20 };//If 20 is your page size
var continuationToken = string.Empty;
var allResults = new List<User>();
do{
if (!string.IsNullOrEmpty(continuationToken))
{
options.RequestContinuation = continuationToken;
}
var userQuery = _client.CreateDocumentQuery<User>(_uriUsersCollection, queryStr, options).ToPagedResults();
continuationToken = userQuery.ContinuationToken;
allResults.AddRange(userQuery.Results);
}while(!string.IsNullOrEmpty(continuationToken));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1757 次 |
| 最近记录: |