【问题标题】:NSPredicate complex queryNSPredicate 复杂查询
【发布时间】: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)

我可以用简单的英语描述我的问题,但无法找到将其格式化为谓词的正确方法。任何帮助将不胜感激!

【问题讨论】:

  • 我会使用子查询(检查:stackoverflow.com/questions/9803971/…
  • 我建议你用块做一个谓词,因为在块内你可以轻松快速地创建这样复杂的查询。
  • 不幸的是,块不能与核心数据获取查询一起使用。至于子查询 - 我一直在使用它们,但不幸的是我不知道如何为查询的最后部分添加 2 个计数
  • @Mamela,谁说它不起作用?我没有使用其他任何东西,而是使用基于块的 CoreData 谓词;但是,我一直本着 CoreData 的精神建立数据库,所以我从来没有遇到过问题。根据您的帖子,您可以在数据库的情况下做同样的事情。如果我对您的实体有更多了解,我会为您创建基于块的请求作为答案。

标签: ios objective-c nspredicate


【解决方案1】:

所以我终于找到了结合使用 ANY 子句和子查询的方法。谓词如下:

ANY productTitles.excluded == nil && SUBQUERY(productTitles, $x, SUBQUERY($x.products, $y, $y.excluded == nil).@count != 0 ).@count != 0

我认为子查询基本上是“ANY”子句的工作方式,但我不知道如何为子查询的子查询执行 ANY 子句。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-28
    • 1970-01-01
    • 1970-01-01
    • 2017-05-10
    • 2014-11-06
    • 2011-06-08
    • 2012-10-25
    相关资源
    最近更新 更多