在对documentDb执行linq计数查询时是否可以获取RequestCharge? 例如样本linq查询
count = client.CreateDocumentQuery<Family>(collectionUri, DefaultOptions)
.Where(f => f.LastName == "Andersen")
.Count();
由于
敦尔
答案 0 :(得分:1)
在对documentDb执行linq计数查询时是否可以获取RequestCharge?
如果要对documentDb使用linq count查询,则需要在Count方法之前调用ToList方法。
.ToList().Count();
它将向documentDb服务器发送多个查询并获取所有文档。以下是我在调用ToList()时在Fiddler中找到的请求列表.Count()。我的集合中只有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;