首页 > 解决方案 > Cosmos DB:如何使用 LINQ 查询检测请求费用

问题描述

在 Cosmos DB v3 中,我得到了一个IOrderedQueryable<T>using GetItemLinqQueryable<T>. 这允许我编写自定义查询。问题是我想在查询实现时跟踪请求费用。如何实现?

当我执行 and 之类的方法时ReadItemAsyncExecuteStoredProcedureAsync返回的对象有一个RequestCharge属性,但我需要使用 linq 查询来检测费用。

标签: azurelinqnosqlazure-cosmosdb

解决方案


您可以ToFeedIteratorIOrderedQueryable.

using Microsoft.Azure.Cosmos.Linq;

var query = container.GetItemLinqQueryable<MyClass>()
    .Where(c => true)
    .ToFeedIterator();

while (query.HasMoreResults)
{
    var response = await query.ReadNextAsync();

    Console.WriteLine(response.RequestCharge);

    foreach (var myClassInstance in response)
    {
        // do stuff
    }
}

编辑:如果您需要计数或任何聚合函数:

var query = container.GetItemLinqQueryable<MyClass>()
    .Where(c => true);
Response<int> x = await query.CountAsync();
Console.WriteLine(x.RequestCharge);
int count = x; // Autoboxing

您可以在GitHub上找到可用扩展功能的完整列表。


推荐阅读