Как подсчитать записи в таблице sqlite db с помощью пакета moor_flutter?

Как подсчитать все строки в таблице и получить в результате количество строк с помощью пакета moor_flutter?

Я видел moor_flutter официальной документации здесь, но я не могу найти то, что я ищу.

Я надеялся, что это будет похоже на функцию ниже в соответствии с сходством в функциях crud при использовании пакета moor_flutter, но он тоже не работает.

Future<List<Person>> countPersons() => count(persons).get();

5 ответов

Я нашел способ найти количество строк таблицы. Вот полное решение с основными комментариями,

//Create expression of count
var countExp = persons.id.count();

//Moor creates query from Expression so, they don't have value unless you execute it as query.  
//Following query will execute experssion on Table.
final query = selectOnly(persons)..addColumns([countExp]);
var result = await query.map((row) => row.read(countExp)).getSingle();

Обратите внимание, что я использовал selectOnly вместо select потому что меня не интересует никакой столбец, кроме графа.

Если вам нужно условие фильтра для вашего подсчета, вы можете вызвать функцию верхнего уровня countAll с указанным параметром filter как вы можете видеть ниже.

      var count = countAll(filter: persons.id.isSmallerThanValue(100));
var res = await (selectOnly(persons)..addColumns([count]))
    .map((row) => row.read(count))
    .getSingle();

Теперь это задокументировано в официальной документации.

Нет такого заявления в moor_flutter (только select, into, update а также delete).

Это должно работать:

Future<int> countPersons() async {
    return (await select(persons).get()).length;
}

или (точно так же, но с одной строкой)

Future<int> countPersons() async => (await select(persons).get()).length;

Или вы можете попробовать написать собственные запросы SQL.

Канонический мавровский путь меня немного сбивает с толку. Если вы чувствуете то же самое, вы можете пойти по старой школе и попробовать:

      @UseDao(
  tables: [Instruments],
  queries: {
    'instrumentsCount': 'SELECT COUNT(*) FROM instruments;'
  },
)

Final numberOfPersons = person.id.count();

Поддерживается в версии 2.4.

Другие вопросы по тегам