NSPredicate - 获取具有多对多关系的实体

时间:2014-12-04 14:09:00

标签: ios core-data nspredicate

考虑ActionassignedTo实体的User关系。 (Action.assignedTo->>用户)

选择actions中包含user的所有assignedTo的查询是什么?

3 个答案:

答案 0 :(得分:2)

子查询有点沉重。 你可以用这个:

[NSPredicate predicateWithFormat:@"ANY assignedTo.userId == %@", user.userId];

答案 1 :(得分:0)

您是否使用Xcode的{​​{1}}生成器创建了模型文件?

如果是这样,请检查您的User.h文件,您应该看到如下内容:

CoreData

这意味着您可以调用该用户的所有操作:

@property (nonatomic, retain) NSSet         *actions;

无需使用谓词。

如果您仍想使用谓词,谓词应如下所示:

NSSet *userActions = user.actions;

如果你需要添加aditional谓词,你应该为它们创建一个NSCompoundPredicate:

NSPredicate *userPredicate = [NSPredicate predicateWithFormat:@"assignedTo == %@",user];

答案 2 :(得分:0)

我发现 SUBQUERY 是正确的答案;它完美无缺:

[NSPredicate predicateWithFormat:
    @"(SUBQUERY(assignedTo, $a, $a.userId == %ld).@count != 0)", user.userId];

并按status过滤

[NSPredicate predicateWithFormat:
    @"(SUBQUERY(assignedTo, $a, $a.userId == %ld).@count != 0) && status != 'Completed'", user.userId];