CoreData NSPredcate具有两个一对多关系



我有一个类似这样的CoreData模型数据结构,用于根据用户所属的组限制信息:

类别<->>信息<->>分组。

我有一个UserGroups对象的NSSet。我希望能够根据组对象的NSSet筛选类别,这样,如果一个类别不包含任何在我的NSSet中有任何组的信息,我的谓词就不会返回这些信息。

关于信息,我可以做

[NSPredicate predicateWithFormat:@"ANY groups in (%@)",groups];

对于类别,我只尝试了以下崩溃:

[NSPredicate predicateWithFormat:@"ANY information.groups in (%@)",groups];

但是我需要在类别级别写一个谓词。我是在这样一种假设下编程的,即我的数据集中的信息足够大,以至于我无法将它们全部提取出来并进行处理以找到我的类别。我想创建一个谓词,它只获取基于用户组的与用户相关的类别。

谢谢你的帮助!

类别上的以下谓词应该有效(假设information是从分类信息的多对多关系):

[NSPredicate predicateWithFormat:@"SUBQUERY(information, $i, ANY $i.groups in %@).@count > 0",groups];

或者,您可以使用相反的关系:

 // your set of Group objects:
 NSSet *groups = ...;
 // all Information objects that are related to any group object:
 NSSet *information = [groups valueForKey:@"information"] ;
 // all Category objects that are related to any information object:
 NSSet *categories = [information valueForKey:@"category"];

可以组合到

 NSSet *categories = [groups valueForKeyPath:@"information.category"];

这种替代解决方案的缺点可能是它还在内存中创建组的中间集合。

最新更新