围绕CosmosDB .NET SDK,我发现了一个有趣的问题。我想使用SDK LINQ支持以下查询:
SELECT VALUE COUNT(1) FROM c WHERE <predicate>
好吧,在写完LINQ查询之后,我意识到可能无法处理像文档查询这样的查询。但是,由于文档查询允许您捕获查询度量标准并在结果页面之间取消阻塞线程,因此我非常喜欢它。这是代码:
client.CreateDocumentQuery<TEntity>.Where(<predicate>).Count()
即使我理解Count()的结果类型不是IQueryable,有没有办法将“count”查询作为文档查询处理?
当然有办法做到这一点。
SDK中内置了CountAsync
扩展。
只需构建你的IQueryable
并在准备好计算时使用.CountAsync()
。
但请记住,没有度量标准集合,因为结果在SDK中汇总。
如果你真的需要度量,那么你可以使用从SQL而不是LINQ和DocumentQuery
,while.HasMoreResults
逻辑创建的常用ExecuteNextAsync
,并从每次迭代中捕获分页结果中的度量。