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 支持上述代码片段。
如果您使用的是 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
对于任何偶然发现此问题的人,在 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)