2017-03-29 2 views
0

푸른 문서 DB 플랫폼에서 C#으로 개발했습니다. 내 응용 프로그램에서 페이징 아키텍처를 구현하려고합니다. 내 코드 :연속 토큰 - CreateDocumentQuery ExecuteNextAsync 함수가 없습니다.

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

AsDocumentQuery() 함수 내 코드 표시 오류 (가 된 IQueryable 방법의 일부 (I 함수가 인식 할 수있는 인터넷에서 몇 가지 예 참조) 낭포 내가하려고 할 때로 인식 할 것 존재하지 않는 query.ExecuteNextAsync를 활성화 할 수 있습니다. 을 내가 Microsoft.Azure.Documents.Client의 DLL 버전에서 작동 1.11.0.0. 감사를 도와 MAK

답변

3

을 계속 토큰과 시나리오 나는 종종이 헬퍼 클래스를 사용 :

으로 793,210

: 이제

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

AsDocumentQuery 같은 코드에서 Microsoft.Azure.Documents.Linq 네임 스페이스를 기입하십시오 정의 확장 방법 그곳에.

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

Gaurav에 의해 enter image description here

+0

좋은 포인터, 이것은 아마도 근본 원인이다. –