ios - Realm:带有属性聚合的查询

标签 ios cocoa-touch swift realm

我有 2 个对象:Person 和 Transaction。一个人可以有多个交易(1-多)。现在我想获取 sum(transactions.amount) > 0 的所有人员。我怎样才能最有效地做到这一点?

我的模型设置:

class Person: RLMObject {
    dynamic var name = ""
    dynamic var transactions = RLMArray(objectClassName: Transaction.className())

    var balance: Int {
        var balance = 0
        for transaction in self.transactions {
            let transaction = transaction as Transaction;
            balance += transaction.amount
        }

        return balance
    }
}

class Transaction: RLMObject {
    dynamic var amount = 0
}

并尝试查询:

let debtPersons = Person.objectsWhere("balance < 0")
let creditPersons = Person.objectsWhere("balance >= 0")

关于这种天真的接收方法:

'Invalid column name', reason: 'Column name balance not found in table'

最佳答案

Realm 目前不支持执行聚合查询,因此没有单行程序来执行您想要的查询。此外,Realm 无法查询未持久化的属性(在本例中,如 balance 所示),因为它们不在数据库中。最好的办法是手动过滤所有 Person 对象,而不是使用 native 查询。

关于ios - Realm:带有属性聚合的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28969446/

相关文章:

ios - 向字典数组添加数据

xcode - 在 Swift 上向侧边栏菜单添加功能

ios - XCode 6.3 Beta 将 iOS 8.3b 设备显示为 "ineligible"

ios - 如何在用户退出时保存当前选项卡栏项目并在重新启动时重新加载到该项目?

ios - AVFoundation 相机的正确 ISO 值

ios - SpriteKit iPhone/iPhoneX/iPad 尺寸问题

ios - 在 iOS 中使用选项卡更改容器 View 内容

xcode - 如何在 Swift 中使用 Cocoa Touch 框架中的代码数据

objective-c - UINavigationItem 不显示事件指示器

ios - Xcode 中的错误 "Use of undeclared type"不会消失