延续令牌 - CreateDocumentQuery ExecuteNextAsync函数不存在

时间:2017-03-29 14:49:15

标签: c# azure azure-cosmosdb

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

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

我的代码在AsDocumentQuery()函数上显示错误(它不被识别为IQueryable方法的一部分(我在互联网上看到该函数识别的几个例子)。所以当我尝试激活查询时.ExecuteNextAsync它不存在。 我使用Microsoft.Azure.Documents.Client dll版本1.11.0.0。 谢谢你的帮助 MAK

2 个答案:

答案 0 :(得分:6)

对于带有Continuation Token的场景,我经常使用这个助手类:

        JScrollPane scrollPane = new JScrollPane(list_1);
    list_1 = new JList();
    scrollPane.setViewportView(list_1);
    list_1.setBounds(16, 94, 579, 248);
    contentPane.add(list_1);
    contentPane.add(scrollPane);

使用this extension

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

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

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

答案 1 :(得分:3)

请在代码中包含Microsoft.Azure.Documents.Linq命名空间,因为AsDocumentQuery是在此处定义的扩展方法。

using Microsoft.Azure.Documents;
using Microsoft.Azure.Documents.Client;
using Microsoft.Azure.Documents.Linq;//Add this line

enter image description here