gpt4 book ai didi

c# - 继续标记 - CreateDocumentQuery ExecuteNextAsync 函数不存在

转载 作者:行者123 更新时间:2023-12-03 04:43:04 27 4
gpt4 key购买 nike

我在azure documentDB平台上用c#开发。我尝试在我的应用程序中实现分页架构。我的代码:

var userQuery = _client.CreateDocumentQuery<User>(
_uriUsersCollection, queryStr, options).AsDocumentQuery();

我的代码在 AsDocumentQuery() 函数上显示错误(它不被识别为 IQueryable 方法的一部分(我在互联网上看到了该函数被识别的几个示例)。因此,当我尝试激活 query.ExecuteNextAsync 时,它是不存在。我使用 Microsoft.Azure.Documents.Client dll 版本 1.11.0.0。感谢您的帮助马克

最佳答案

对于带有延续 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; }
}

this extension :

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;
}

现在,您可以在代码中或多或少地使用它:

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));

关于c# - 继续标记 - CreateDocumentQuery ExecuteNextAsync 函数不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43096947/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com