如何使用 moor_flutter 包计算 sqlite db table 中的记录?
How to count records in sqlite db table using moor_flutter package?
如何计算 table 中的所有行并使用 moor_flutter 包获取结果行数?
我看过 moor_flutter 官方文档 here 但我找不到我要找的东西。
根据使用 moor_flutter 包时 crud 函数的相似性,我希望它会像下面的函数,但它也不起作用。
Future<int<Person>> countPersons() => count(persons).get();
编辑
现在,moor 支持计数表达式,请参阅this link or 。
这个答案不再是,因为明显的性能问题。
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;
或者您可以尝试 write custom SQL queries。
最终人数 = persons.id.count();
我想出了一种方法来查找 table 行的计数。这是带有基本注释的完整解决方案,
//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
,因为我对除 Count 之外的任何列都不感兴趣。
如果您需要对计数进行过滤条件,则可以使用命名参数 filter
调用顶级函数 countAll
,如下所示。
var count = countAll(filter: persons.id.isSmallerThanValue(100));
var res = await (selectOnly(persons)..addColumns([count]))
.map((row) => row.read(count))
.getSingle();
它现在记录在 the official documentation
规范的摩尔人方式似乎让我有些困惑。如果你也有同感,你可以去老学校试试:
@UseDao(
tables: [Instruments],
queries: {
'instrumentsCount': 'SELECT COUNT(*) FROM instruments;'
},
)
如何计算 table 中的所有行并使用 moor_flutter 包获取结果行数?
我看过 moor_flutter 官方文档 here 但我找不到我要找的东西。
根据使用 moor_flutter 包时 crud 函数的相似性,我希望它会像下面的函数,但它也不起作用。
Future<int<Person>> countPersons() => count(persons).get();
编辑
现在,moor 支持计数表达式,请参阅this link or
这个答案不再是,因为明显的性能问题。
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;
或者您可以尝试 write custom SQL queries。
最终人数 = persons.id.count();
我想出了一种方法来查找 table 行的计数。这是带有基本注释的完整解决方案,
//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
,因为我对除 Count 之外的任何列都不感兴趣。
如果您需要对计数进行过滤条件,则可以使用命名参数 filter
调用顶级函数 countAll
,如下所示。
var count = countAll(filter: persons.id.isSmallerThanValue(100));
var res = await (selectOnly(persons)..addColumns([count]))
.map((row) => row.read(count))
.getSingle();
它现在记录在 the official documentation
规范的摩尔人方式似乎让我有些困惑。如果你也有同感,你可以去老学校试试:
@UseDao(
tables: [Instruments],
queries: {
'instrumentsCount': 'SELECT COUNT(*) FROM instruments;'
},
)