我在我的Realm数据库上有以下查询
realm.objects(Event)
.filter("ANY presentation.speakers.lastName CONTAINS [c]%@", searchTerm)
Run Code Online (Sandbox Code Playgroud)
不幸的是它不起作用,我收到以下错误
'无效谓词',原因:'聚合操作只能用于RLMArray属性'
presentation是Event类上定义的可选实体
public dynamic var presentation : Presentation?
Run Code Online (Sandbox Code Playgroud)
speakers是List<PresentationSpeakers>这样定义的演示文稿
public let speakers = List<PresentationSpeaker>()
Run Code Online (Sandbox Code Playgroud)
我的感觉是ANY必须直接在一个集合上操作,但speakers 不是直接属性Event.
我的查询有什么问题,如何正确实现?
由于presentation是一对一的关系,因此无需ANY在您的查询中写入:
realm.objects(Event)
.filter("presentation.speakers.lastName CONTAINS [c]%@", searchTerm)
Run Code Online (Sandbox Code Playgroud)
的ANY是隐含的speakers,因为它是一个嵌套的keyPath属性.要指定其他内容ANY,您可以speakers像这样使用修饰符:
realm.objects(Event)
.filter("presentation.speakers[FIRST].lastName CONTAINS [c]%@", searchTerm)
Run Code Online (Sandbox Code Playgroud)
但是,Realm还不支持这种查询.
有关谓词以及Realm支持哪些谓词的更多信息,请参阅Realm的谓词备忘单:https://realm.io/news/nspredicate-cheatsheet/