2017-06-22 25 views
0

documentDB Microsoft.Azure.Documents.Clientバージョン1.11.0.0で作業しています。 私は質問のページングをしようとするたびに、次の20のベスト結果を取る。 しかし、もし私がdbの要素を25個だけ持っていれば、最初の呼び出しでは、次の呼び出しで最初の呼び出しを受け取りましたが、私はcontinueトークンを呼び出して5回の結果ではなく20回の結果を再度受け取りました。 私のコードは次のとおりです。DocumentDBのページングは​​、正常に機能していません。

public static async Task<Tuple<List<Student>, string, int>> StudentSearch(string text, string continuationToken) 
{ 
    List<Student> results = new List<Student>(); 
    try 
    { 
     if (string.IsNullOrEmpty(continuationToken)) 
     { 
      FeedOptions options = new FeedOptions { MaxItemCount = 20 }; 
      var userQuery = _client.CreateDocumentQuery<Student>(
      _uriStudentCollection, options).Where(x => x.StudentName.ToLower().Contains(text) || x.Description.ToLower().Contains(text)).OrderBy(x => x.Rank.TotalScore).AsDocumentQuery(); 
      var feedResponse = await userQuery.ExecuteNextAsync<Student>(); 
      foreach (var ad in feedResponse.AsEnumerable()) 
      { 
       results.Add(ad); 
      } 
      string continuation = feedResponse.ResponseContinuation; 
      return new Tuple<Student>, string, int>(results, continuation, results.Count); 
     } 
     else 
     { 
      FeedOptions feedOptions = new FeedOptions { MaxItemCount = 20, RequestContinuation = continuationToken }; 
      var userQuery = _client.CreateDocumentQuery<Student>(
      _uriStudentCollection, feedOptions).Where(x => x.StudentName.ToLower().Contains(text) || x.Description.ToLower().Contains(text)).OrderBy(x => x.Rank.TotalScore).AsDocumentQuery(); 

      var feedResponse = await userQuery.ExecuteNextAsync<Student>(); 
      foreach (var ad in feedResponse.AsEnumerable()) 
      { 
       results.Add(ad); 
      } 
      string continuation = feedResponse.ResponseContinuation; 
      return new Tuple<List<Student>, string, int>(results, continuation, results.Count); 
     } 
    } 
    catch (Exception ex) 
    { 
     return null; 
    } 
} 
+1

最初から同じ20か最後の5プラス15ですか? – Matt

答えて

1

あなたがコードを言及したと私は私の側に問題がREPROすることはできません。あなたのコードには何の問題もないようです。

Microsoft.Azure.Documentsバージョン1.14.1でコードをテストすると正しく動作します。

enter image description here

ことが可能である場合は最新のものにMicrosoft.Azure.Documentsを更新しようとしていてください。あなたのコードにはいくつかの冗長性があるようです。次のコードを使用して置き換えることができます。

public static async Task<Tuple<List<Student>, string, int>> StudentSearch(string text, string continuationToken = null) 
     { 
      var results = new List<Student>(); 
      FeedOptions options = new FeedOptions 
      { 
       MaxItemCount = 20 
      }; 
      if (!string.IsNullOrEmpty(continuationToken)) 
      { 
       options.RequestContinuation = continuationToken; 
      } 
      var userQuery = _client.CreateDocumentQuery<Student>(
     _uriStudentCollection, feedOptions).Where(x => x.StudentName.ToLower().Contains(text) || x.Description.ToLower().Contains(text)).OrderBy(x => x.Rank.TotalScore).AsDocumentQuery(); 

      var feedResponse = await userQuery.ExecuteNextAsync<Student>(); 
      foreach (var ad in feedResponse.AsEnumerable()) 
      { 
       results.Add(ad); 
      } 
      string continuation = feedResponse.ResponseContinuation; 
      return new Tuple<List<Student>, string, int>(results, continuation, results.Count); 
     } 
関連する問題