ios - Realm Swift - 使用 List 属性过滤对象(不止一个)
问题描述
如何使用子对象上的多个属性过滤对象。所以“找到所有有 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)
解决方案
我不认为你可以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
推荐阅读
- javascript - 如何将 Google App Script 结果返回到外部网页?
- c++ - 在 C++ 中的 SetClipboardData() 之后粘贴不包括记事本的换行符
- wagtail - 禁用 Wagtail “复制”功能
- go - go/pkg/tool/linux_amd64/link:运行 gcc 失败:退出状态 1 /usr/bin/ld:找不到 -lgdal
- fpga - 有人知道如何在 FPGA 板上实现蝴蝶 PUF 吗?
- c++ - Visual Studio 2017 和 codeblock17.12 中的 ctime 有区别吗?
- python - python中使用差分进化的分段回归
- ios - Facebook 和 Google OAuth 在使用 testflight 进行测试时工作正常,但在应用程序经过审核以供发布时却无法正常工作
- java - 休眠忽略自动提交错误设置。而是创建本地连接
- azure-pipelines - 在天蓝色管道中显示灯塔结果并在某些灯塔条件下构建失败