NSPredicate 复杂查询
Posted
技术标签:
【中文标题】NSPredicate 复杂查询【英文标题】:NSPredicate complex query 【发布时间】:2014-06-27 15:11:20 【问题描述】:我有一个复杂的NSPredicate
问题,我无法解决。
我的数据结构如下:
类别 - 有很多标题
标题 - 有很多产品
Title - 具有 latestProduct 属性 (title.latestProduct
)
可以通过排除属性排除标题 (title.excluded = YES
)
可以通过排除属性排除产品 (product.excluded = YES
)
我正在寻找的结果:我需要获取系统中所有类别的列表,但是我想排除以下类别:
排除所有类别标题(category.titles.excluded == YES)
或
排除所有最新产品 (category.titles.latestProduct.excluded == YES
)
或者(这对我来说是最困难的部分)
(category.titles.excluded == YES
) 的计数和 (category.titles.latestProduct.excluded == YES
) 的计数之和等于类别标题的计数 (category.titles.count
)
我可以用简单的英语描述我的问题,但无法找到将其格式化为谓词的正确方法。任何帮助将不胜感激!
【问题讨论】:
我会使用子查询(检查:***.com/questions/9803971/…) 我建议你用块做一个谓词,因为在块内你可以轻松快速地创建这样复杂的查询。 不幸的是,块不能与核心数据获取查询一起使用。至于子查询 - 我一直在使用它们,但不幸的是我不知道如何为查询的最后部分添加 2 个计数 @Mamela,谁说它不起作用?我没有使用其他任何东西,而是使用基于块的 CoreData 谓词;但是,我一直本着 CoreData 的精神建立数据库,所以我从来没有遇到过问题。根据您的帖子,您可以在数据库的情况下做同样的事情。如果我对您的实体有更多了解,我会为您创建基于块的请求作为答案。 【参考方案1】:所以我终于找到了结合使用 ANY 子句和子查询的方法。谓词如下:
ANY productTitles.excluded == nil && SUBQUERY(productTitles, $x, SUBQUERY($x.products, $y, $y.excluded == nil).@count != 0 ).@count != 0
我认为子查询基本上是“ANY”子句的工作方式,但我不知道如何为子查询的子查询执行 ANY 子句。
【讨论】:
以上是关于NSPredicate 复杂查询的主要内容,如果未能解决你的问题,请参考以下文章