[英]How can I use NSPredicate to filter on core data relationships?
假设我有“obj”类型的核心数据对象,它具有属性“propertyA”和与“sub”类型的对象的一对多关系,该对象具有两个属性“propertyB”和“propertyC”。
我想获取propertyA等于一个值的所有objs和一个带有propertyB和propertyC set的子obj。
如果它只是propertyA和propertyB,我会这样做
[NSPredicate predicateWithFormat:@"ANY sub.propertyB = %@ AND propertyA == %@", ...];
问题是我无法弄清楚如何添加第二个属性。 我只想要至少有一个具有两个属性为true的子的obj。 我尝试了以下,但它不起作用:
[NSPredicate predicateWithFormat:@"ANY (sub.propertyB = %@ AND sub.propertyC) AND propertyA == %@", ...];
我已经尝试过没有ANY,但这也不起作用。 我怎样才能做到这一点?
由于您与子对象具有多对多关系,因此obj
的subs
属性返回一个集合而不是单个对象。 要查询集合,您需要使用SUBQUERY。
子查询具有以下形式:
SUBQUERY(collection, $individualCollectionItem, expression-with-collection-item)
在这种情况下,你会想要类似的东西
SUBQUERY(subs,$s,$s.propertyB==%@) AND SUBQUERY(subs,$s,$s.propertyC!=NULL)
解决方案似乎是:
[NSPredicate predicateWithFormat:@"propertyA == %@ AND (SUBQUERY(sub, $s, $s.propertyB == %@ AND $s.propertyC == %@).@count != 0)", propertyAvalue, propertyBvalue, propertyCvalue];
最后的值是您希望各种属性等于的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.