将 LINQ“计数”查询作为 IDocumentQuery 处理

Tom*_*uby 6 linq azure-cosmosdb

围绕 CosmosDB .NET SDK,我发现了一个有趣的问题。我想对以下查询使用 SDK LINQ 支持:

SELECT VALUE COUNT(1) FROM c WHERE <predicate>
Run Code Online (Sandbox Code Playgroud)

好吧,在编写 LINQ 查询之后,我立即意识到可能无法处理诸如文档查询之类的查询。但是,由于文档查询允许您捕获查询指标并在结果页面之间解除阻塞线程,因此我非常喜欢它。这是代码:

client.CreateDocumentQuery<TEntity>.Where(<predicate>).Count()
Run Code Online (Sandbox Code Playgroud)

即使我知道 Count() 的结果类型不是 IQueryable,有没有办法将“计数”查询作为文档查询处理?

Nic*_*sas 5

当然,有一种方法可以做到这一点。

CountAsyncSDK 中内置了一个扩展。

当您准备好计数时,只需构建IQueryable并使用.CountAsync()即可。

但是请记住,由于结果是在 SDK 中聚合的,因此不会有任何指标收集。

如果您确实需要指标,那么您可以使用通常DocumentQuery从 SQL 创建的而不是 LINQ 和 while.HasMoreResults,ExecuteNextAsync逻辑并从每次迭代的分页结果中捕获指标。