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

时间:2018-09-07 12:41:40

标签: linq azure-cosmosdb

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

SELECT VALUE COUNT(1) FROM c WHERE <predicate>

好吧,在编写LINQ查询后,我立即意识到可能没有办法处理诸如文档查询之类的查询。但是,由于文档查询使您可以捕获查询指标并取消阻塞结果页面之间的线程,因此我强烈建议您这样做。这是代码:

client.CreateDocumentQuery<TEntity>.Where(<predicate>).Count()

即使我了解Count()的结果类型不是IQueryable,还是可以将“计数”查询作为文档查询来处理吗?

1 个答案:

答案 0 :(得分:4)

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

SDK中内置了CountAsync扩展名。

只需构造您的IQueryable并在准备获得计数时使用.CountAsync()

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

如果您确实需要度量,则可以使用从SQL创建的常规DocumentQuery而不是LINQ和while.HasMoreResultsExecuteNextAsync逻辑,并在每次迭代时从分页结果中获取度量