Пакет SDK для CosmosDb Linq Count v3

Кто-нибудь знает, как (в новом SDK v3 для Azure CosmosDB) из LINQ IQueryable асинхронно получить счетчик?

        var con = col.Container();
        IQueryable<T> q = con.GetItemLinqQueryable<T>(false);
        q = q.Where(d => d._type == type);
        int count = await q.CountAsync()///this is an SDK internal method and does not work

person MiddleTommy    schedule 11.09.2019    source источник
comment
Эта функция в настоящее время находится в разработке и будет выпущена в ближайшем будущем.   -  person Nick Chapsas    schedule 11.09.2019
comment
Спасибо за ответ. Я узнал, когда CosmosDb говорит, что в ближайшем будущем это может означать следующие 36 месяцев (или дольше, если они найдут новый API, который они хотят выпустить ????).   -  person MiddleTommy    schedule 11.09.2019


Ответы (2)


В версии 3.2 SDK добавлена ​​функция асинхронных агрегатов.

person MiddleTommy    schedule 27.09.2019

Вы можете попробовать следующий код (внесите некоторые изменения в соответствии с вашей реальной ситуацией):

var con = col.Container();
IQueryable<T> q = con.GetItemLinqQueryable<T>(false);
var iterator = q.Where(d => d._type == type).ToFeedIterator();
int totalCount = 0;
while (iterator.HasMoreResults)
{
    var result = await iterator.ReadNextAsync();
    totalCount += result.Count();
}
person Hury Shen    schedule 11.09.2019
comment
Разве при этом не извлекаются все документы, запрошенные с сервера, и выполняется локальный подсчет? Я хочу, чтобы подсчет происходил на сервере. - person MiddleTommy; 11.09.2019
comment
Голосование против. Получение всей базы данных для подсчета неверно. Это приведет к большому трафику (отсюда задержка и оплата). Когда размер базы данных увеличивается, она также ломается из-за объема. - person Jonas Stensved; 29.04.2021