Flutter Dart中Realm DB按类型求和报错,求解决方案
问题解决:Realm DB按类型统计value总和
错误原因
你的查询语句逻辑完全颠倒,且误用了@sum操作符:
@sum在Realm中仅适用于列表类型的属性(比如List<double> values),而type是单个字符串字段,因此触发运行时错误。- 正确逻辑应该是先筛选指定
type的条目,再对这些条目的value字段求和,而非反过来操作。
正确实现方案
1. 统计单个类型的value总和
先查询符合类型条件的所有条目,再计算value字段的总和:
// 查询所有type为"Groceries"的Item var groceryItems = realm.query<Item>('type == "Groceries"'); // 计算总和 double groceryTotal = groceryItems.sum((item) => item.value);
或者用更简洁的链式写法:
double groceryTotal = realm.all<Item>().query('type == "Groceries"').sum((i) => i.value);
2. 按类型分组统计所有类型的总和
如果需要一次性统计所有类型的总和,可以先获取全部数据,再按type分组计算:
// 获取所有Item记录 var allItems = realm.all<Item>(); // 分组统计每个类型的value总和 Map<String, double> typeTotals = {}; for (var item in allItems) { typeTotals[item.type] = (typeTotals[item.type] ?? 0) + item.value; } // 示例:打印所有类型的统计结果 typeTotals.forEach((type, total) { print('$type 总金额:$total'); });
验证示例
用你提供的type="Crypto"、value=5987.0的测试数据,执行type == "Crypto"的查询求和,结果会正确返回5987.0。
内容的提问来源于stack exchange,提问作者kiwi88
相关产品推荐
相关产品推荐

