如何解决如何为父实体满足NSPredicate
我有两个核心数据实体:Parent
和Child
。
Parent
对于一组孩子具有属性children
每个Child
都有一个parent
属性(将其链接到其父级)和一个age
属性。
(我的数据比这更复杂,但这与问题无关)
我有一个nspredicate
实体的Parent
,它可以选择一组父母,而nspredicate
实体的实体,是一个Child
,它可以根据年龄来选择实体。
我要做的是为一个nspredicate
构造一个FetchRequest<Child>
,该返回的Child
实体集合满足两个谓词
我知道我可以检索满足其谓词('Parent
')的parents
个实体的数组,然后拥有一个像nspredicate(format: "parent IN %@",parents)
这样的子谓词,并将其包含在复合AND中,这个孩子的谓词,但是可能有数百个父母满足他们的谓词,在我看来,有两个单独的查询是一个矛盾。
FetchRequest
必须为FetchRequest<Child>
,因为它在SwiftUI视图中使用,所以我不能只构建结果数组。
我怀疑我可以使用SUBQUERY谓词来执行此操作,但无法解决如何将父谓词嵌入到SUBQUERY中的问题。我在Problem with subpredicate TRUEPREDICATE
实体的谓词字符串中收到类似Parent
的错误。
希望这有意义吗?有什么想法或建议吗?
谢谢
解决方法
如果从Child
到Parent
的关系是一对一的,则不需要SUBQUERY。在父谓词的格式字符串(可以通过predicateFormat
获得)中,可以用子级到该属性的键路径替换字符串中的每个父属性名称,即
attribute
变为parent.attribute
然后可以使用NSCompoundPredicate
的{{1}}将结果谓词与子谓词组合。
如果解析predicateFormat不切实际,则另一种选择是使用andPredicateWithSubpredicates
将一个访存的结果作为参数传递给另一个(将其转换为SQL子选择)。像这样:
NSFetchRequestExpression
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。