Как использовать агрегатную функцию .max() в базе данных Isar для Flutter?

Я изучаю, как использовать базу данных Isar для моего приложения Flutter. Я пытаюсь получить максимальное значение столбца. Документация Isar предполагает, что я могу использовать.max()агрегатную функцию, но не дает пример того, как ее использовать в запросе.

Ниже приведен код, который у меня есть. Я хотел бы, чтобы кто-нибудь предложил, что я поставил вместо<rest_of_query_here>. Я пытался поставить его после.where(),.filter(), даже после.findAll()но ни один не приемлем.

      part 'client.g.dart';

@collection
class Client {
  Id id = Isar.autoIncrement; // you can also use id = null to auto increment

  @Index(type: IndexType.value)
  String? clientId; // actually a number of the form '10001','10002',...

  String? lastname;
  String? firstname;
}

...
// We should use .max() somewhere in the query
Future<String> getMaxClientId() async {
  final isar = await Isar.open([ClientSchema]);
  final clientId = await isar.clients.<rest_of_query_here>;
  return clientId == null ? '10000' : clientId;
}
...

1 ответ

В соответствии с этой документацией вам необходимо выполнить запрос свойства, чтобы использовать операцию .max(). Запрос свойств изолирует и возвращает одно свойство (или столбец, если думать в терминах SQL), над которым затем можно выполнять агрегированные операции , такие как .max(), .min(), .sum(), .average().

В вашем примере замените строку <rest_of_query_here> на следующую:

      final clientId = await isar.clients.where().clientIdProperty().max();
Другие вопросы по тегам