2015-06-04 2 views
2

Допустим, у меня есть две коллекции и в каждой коллекции 10 документов. Каков рекомендуемый способ сделать подкачку, если я хочу извлечь максимум 15 документов?Пейджинг DocumentDB со множеством коллекций

Когда я запускаю код ниже, я получаю 20 результатов. Он начинает просить первый сборник, который returnes 10, а затем второй, который также возвращает 10, но он должен вернуть 5, так как это MaxItemCount 15.

 var batches = new List<IEnumerable<T>>(); 
     var feedOptions = new FeedOptions 
     { 
      MaxItemCount = 15 
     }; 

     var docQuery = Client.CreateDocumentQuery<T>(Database.SelfLink, feedOptions) 
       .Where(predicate).AsDocumentQuery(); 

     do 
     { 
      var batch = await docQuery.ExecuteNextAsync<T>(); 
      batches.Add(batch); 

     } while (docQuery.HasMoreResults); 

     var docs = batches.SelectMany(b => b).Take(maxItemCount.Value); 

     return docs; 

ответ

3

MaxItemCount контролирует количество результатов на странице, а не общее количество возвращаемых результатов. Чтобы уменьшить общее количество результатов, измените предложение while, чтобы проверить, например, (docQuery.HasMoreResults & & batch.Length < = maxItemCount.Value).

Надеюсь, это поможет.

+0

Я уже пробовал это с таким же результатом. Проблема заключается в том, что данные находятся в нескольких коллекциях. Когда в этом примере (MaxItemCount = 15) он извлек 10 из первой коллекции, он должен получить только 5 из другого, но он также извлекает 10. –

+1

Для этого вы должны управлять итерацией коллекции и поисковым вызовом на стороне клиента , т. е. вызвать client.ResolveForRead() и перечислить собственные ссылки коллекции. Затем внутри каждой коллекции вызовите ExecuteNextAsync() и установите MaxItemCount в Math.Min (maxItemCount.value - batch.Length, 15) –

Смежные вопросы