使用嵌套的 NSPredicate SUBQUERY

Posted

技术标签:

【中文标题】使用嵌套的 NSPredicate SUBQUERY【英文标题】:Using nested NSPredicate SUBQUERY 【发布时间】:2013-11-02 20:18:39 【问题描述】:

这是我的对象图的相关部分:

Store <-->> Gift <<--> Person <<-->> Tag

我希望能够通过 tag.filtering 属性过滤商店,如下所示:

ANY gifts.person.tags.filtering == YES

但我理解为什么这不起作用,因为限制为一对多键。所以我尝试使用一组嵌套的 SUBQUERY 谓词,如下所示:

NSPredicate* filterPredicate = [NSPredicate predicateWithFormat:
   @"(0 != SUBQUERY(gifts, $x, 
     (0 != SUBQUERY($x.person.tags, $y, $y.filtering==YES).@count)).@count)"];

这在运行时失败并出现错误:

"SQLite error code:1, 'no such column: t3.ZFILTERING'"

似乎我在正确的轨道上,在这里,但找不到使用相同语法的任何其他示例。我错过了什么?

【问题讨论】:

我看不到明显的错误。你可以试试[NSPredicate predicateWithFormat:@"SUBQUERY(gifts, $x, ANY $x.person.tags.filtering == YES).@count != 0"] 吗?这应该做同样的事情,但稍微简单一些。 是的,这行得通。我想我想太多了。谢谢! 【参考方案1】:

根据我上面的评论:

[NSPredicate predicateWithFormat:@"SUBQUERY(gifts, $x, ANY $x.person.tags.filtering == YES).@count != 0"]

有效,甚至比嵌套的 SUBQUERY 更简单。

【讨论】:

以上是关于使用嵌套的 NSPredicate SUBQUERY的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 NSPredicate 中使用嵌套的 SUBQUERY?

如何在嵌套字典数组上使用 NSpredicate

NSPredicate 针对 NSArray 中的嵌套值

使用嵌套的 NSPredicate SUBQUERY

NSPredicate 根据嵌套结构中的属性过滤自定义对象

NSPredicate 嵌套字典动态键