“明显”的解决方案将是谓词:
"ANY parents.children.age == 10"
但是,“ANY”运算符不适用于嵌套的一对多关系。因此,您需要一个子查询:
NSArray *grandParents = your array of GrandParent objects;
NSPredicate *predicate = [NSPredicate
predicateWithFormat:@"SUBQUERY(parents, $p, ANY $p.children.age == 10).@count > 0"];
NSArray *filtered = [grandParents filteredArrayUsingPredicate:predicate];
评论:
SELF
不需要在谓词中使用。filteredArrayUsingPredicate
将谓词应用于GrandParent
数组中的每个对象。
- 在谓词中使用 SUBQUERY 的文档似乎很少。NSExpression 类参考中有一个示例。另请参阅NSPredicate Expression 中 SUBQUERY 的快速解释。
- 在这种情况下,SUBQUERY 中的谓词应用于
Parent
单个GrandParent
. SUBQUERY 返回有任何 10 岁孩子的父母。因此"SUBQUERY(...).@count > 0"
,如果祖父母至少有一个父母有任何 10 岁的孩子,则评估为 TRUE。
添加:我刚刚发现它实际上可以在没有 SUBQUERY 的情况下完成:
NSPredicate *predicate = [NSPredicate
predicateWithFormat:@"ANY parents.@unionOfArrays.children.age == 10"];
工作并给出所需的结果。(它可能不如 SUBQUERY 有效,但我没有对此进行测试。)