如何在 SDK V3 上对 Cosmos-db 查询异步运行 LINQ Count

Nav*_*avi 5 .net c# linq asynchronous azure-cosmosdb

我的 C# 代码中有一个现有的 Cosmos-db SDK V3 查询,如果“ allowSynchronousQueryExecution”设置为 true 或GetItemsQueryIterator用于异步执行,我可以对其运行 Count 方法。是否有其他方法可以以更干净的方式异步运行计数,如下所示:

var count = await query.CountAsync();
Run Code Online (Sandbox Code Playgroud)

我知道 SDK V2 支持上述代码片段。

Ste*_*veA 8

如果您使用的是 GetItemLinqQueryable();,您现在可以使用问题中的代码;

确保您将其包含Microsoft.Azure.Cosmos.Linq在 using 语句中。

例子:

IOrderedQueryable<MyClass> linqQueryable = container.GetItemLinqQueryable<MyClass>();
int count = await linqQueryable.CountAsync();
Run Code Online (Sandbox Code Playgroud)

如果您希望获得请求费用和/或其他详细信息,则可以使用如下内容:

IOrderedQueryable<MyClass> linqQueryable = container.GetItemLinqQueryable<MyClass>();
Response<int> count = await linqQueryable.CountAsync();
var charge = count.RequestCharge;
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅: https: //github.com/Azure/azure-cosmos-dotnet-v3/pull/729和https://github.com/Azure/azure-cosmos-dotnet-v3/pull/776


Ste*_*ter 6

对于任何偶然发现此问题的人,在 SDK V3 中您可以执行以下操作:

var query = this.container.GetItemLinqQueryable<T>(
         requestOptions: new QueryRequestOptions
         {
             PartitionKey = new PartitionKey(yourKey),
             MaxItemCount = maxCount
         }
     )
     .Where(yourPredicate);

 var feedIterator = this.container.GetItemQueryIterator<T>(query.ToQueryDefinition());

 var results = new List<T>();
 while (feedIterator.HasMoreResults)
 {
   results.AddRange(await feedIterator.ReadNextAsync());
 }
Run Code Online (Sandbox Code Playgroud)