다음은 각 쿼리에 대한 비용을 기록하고 또한 페이징을 처리 할 필요가있는 작업은 다음과 같습니다
public async Task<IEnumerable<T>> Query<T>(string databaseId, string collectionId, SqlQuerySpec sqlQuery, int take)
where T : Resource
{
double queryCost = 0;
const int maxPageSize = 100;
var query = _client.CreateDocumentQuery<T>(
UriFactory.CreateDocumentCollectionUri(databaseId, collectionId),
sqlQuery,
new FeedOptions() {MaxItemCount = Math.Min(maxPageSize, take)}).AsDocumentQuery();
var response = await query.ExecuteNextAsync<T>();
queryCost += response.RequestCharge;
var entities = response.ToList();
while (entities.Count < take && query.HasMoreResults)
{
var nextResponse = await query.ExecuteNextAsync<T>();
queryCost += nextResponse.RequestCharge;
entities.AddRange(nextResponse);
}
Debug.WriteLine(
"Query [{0}] for {1} documents in collection [{2}] cost {3} RUs.",
sqlQuery.QueryText,
take,
collectionId,
queryCost);
return entities.Take(take).ToList(); // We may end up with more than the requested number of items.
}
아, 어쩌면 좀 더 명확해야합니다. 나는 특히 "CreateXYZ"가 아닌 질문에 대해 말하고 있었다. 나의 나쁜 것은 나의 원래 질문을 수정할 것이다. –
죄송합니다! 사실 그것은 나빴다 :). 원래 질문에서 검색어를 언급했습니다. 어쨌든, 해결 방법을 사용하여 내 대답을 업데이트했습니다. HTH. –
전혀 보지 못합니다. 이것은 DocumentClient.CreateDocumentQuery() 호출을 통해 이루어진다. 너는 다른 것을 시도해 봤어? –