如何使用子对象的多个属性来过滤对象。因此,“找到所有年龄大于10岁的男孩的父母”
class Parent: Object {
@objc dynamic var name: String?
let children = List<Child>()
}
class Child: Object {
@objc dynamic var name: String?
@objc dynamic var gender: String?
@objc dynamic var age: Int?
}
let filtered = realm.objects(Parent.self).filter("ANY (children.name == %@ && children.gender == %@)", "some name", "male")
这似乎不是有效的查询。
还是我必须做这样的事情,奇怪的是似乎也给出了错误的结果-但是我可能需要对此做更多的测试。
let filtered = realm.objects(Parent.self).filter("ANY children.name == %@", "some name").filter("ANY children.gender == %@", "male")
最后,看来首先让所有符合条件的孩子都可以工作,然后找到这些孩子的父母工作可靠。
let matchingChildren = realm.objects(Child.self).filter("name == %@ && gender == %@)", "some name", "male")
let parentsOfMatchingChildren = realm.objects(Parent.self).filter("ANY children IN %@", matchingChildren)
答案 0 :(得分:1)
我认为您不能将ANY
与这样复杂的括号一起使用。您需要分割ANY
:
ANY children.name == %@ && ANY children.age > %@
此外,%@
用于对象(例如字符串)。对于年龄这样的整数,您需要使用%d
:
ANY children.name == %@ && ANY children.age > %d
或者,您也可以使用SUBQUERY
:
SUBQUERY(children, $child, $child.name == %@).@count > 0 && SUBQUERY(children, $child, $child.age >%d).@count > 0