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

NSPredicate for fetching items from to-many relationship excluding particular related entity

我将核心日期设置为:

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)

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

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

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