是否有可能得到RequestCharge执行对documentDb一个LINQ计数查询时?
如果要对documentDb使用linq计数查询,则需要在Count方法之前调用ToList方法。
.ToList().Count();
它会发送多个查询到documentDb服务器并获取所有文档。这里是我在调用ToList()。Count()时在Fiddler中找到的请求列表。我的收藏中只有2个文档,因此会发送2/dbs/ToDoList/colls/Items请求。
它等于下面的代码和RequestCharges可以用下面的代码被添加在一起。
IDocumentQuery<T> query = client.CreateDocumentQuery<Family>(collectionUri, DefaultOptions)
.Where(f => f.LastName == "Andersen")
.AsDocumentQuery();
List<T> results = new List<T>();
double sumRequestCharges = 0;
while (query.HasMoreResults)
{
FeedResponse<T> queryResult = await query.ExecuteNextAsync<T>();
sumRequestCharges += queryResult.RequestCharge;
results.AddRange(queryResult);
}
如果您只是需要查询文档的计数,我们建议您使用sql查询而不是.ToList方法。它不会发送多个请求到documentDb服务器并节省大量时间。以下代码供您参考。
var query = client.CreateDocumentQuery<object>(
UriFactory.CreateDocumentCollectionUri(DatabaseId, CollectionId),new SqlQuerySpec("SELECT count(c.id) FROM c")).AsDocumentQuery();
FeedResponse <object> queryResult = await query.ExecuteNextAsync<object>();
double requestCharge = queryResult.RequestCharge;
谢谢Amor我会玩sql选择查询,看看会产生什么。请注意,我正在处理的文档数据库查询示例不使用ToList方法! –
直接调用Count方法会引发异常。如果它支持你,你可以在使用Fiddler调用Count方法时检查发送了多少请求。 – Amor
嗨,Amor,请参阅此链接的DocumentClient使3个调用 - https://stackoverflow.com/questions/44590614/documentdb-query-that-expects-full-results-from-aggregate-functions-is-not-sup –