NSPredicate 用于从一对多关系中获取项目,不包括特定的相关实体

Posted

技术标签:

【中文标题】NSPredicate 用于从一对多关系中获取项目,不包括特定的相关实体【英文标题】:NSPredicate for fetching items from to-many relationship excluding particular related entity 【发布时间】:2020-02-12 19:32:53 【问题描述】:

我有一个核心日期设置为:

Item-
id: String
name: String
projects: [Project]? (many-to-many optional relationship)

Project-
id: String
name: String
items: [Item]? (many-to-many optional relationship)

当我想从特定项目中获取所有项目时,我使用这个谓词:NSPredicate(format: "ANY projects.id == %@", project.id)

现在,我必须获取所有与特定项目无关的项目。 为此,我正在尝试使用以下谓词:NSPredicate(format: "(projects.@count == 0) OR (NONE projects.id == %@)", project.id)

这个谓词的问题是它不能正确处理与多个项目相关的项目。

【问题讨论】:

【参考方案1】:

我建议使用 SUBQUERY 而不是 Apple 提供的 ANY、ALL、NONE 运算符(尤其要避免使用 NONE)。

NSPredicate(format: "SUBQUERY(projects, $p, $p.id == %@).@count == 0", project.id)

【讨论】:

以上是关于NSPredicate 用于从一对多关系中获取项目,不包括特定的相关实体的主要内容,如果未能解决你的问题,请参考以下文章

NSPredicate,使用一对多关系的子集获取结果

使用 NSPredicate 获取一对多关系值

NSPredicate 用于集合中的最新项目

用于多对多关系的 NSPredicate

Core Data 获取一对多关系的数据

在一对多关系中使用 NSPredicate 进行过滤