【发布时间】:2016-04-19 13:49:37
【问题描述】:
我正在尝试为 NSPredicate 编写一个 SUBQUERY。我的问题是我手头没有 SUBQUERY 的谓词部分的查询。有没有办法在 SUBQUERY 中嵌套一个 NSPredicate?
例如这是我尝试过的:
let ordersPredicate = NSPredicate()//some predicate passed in
//how do I use the ordersPredicate inside the subquery??
let subQueryPredicate = NSPredicate(format: "SUBQUERY(orders, $x,'%@').@count > 0", ordersPredicate.predicateFormat)
更新:我现在不得不通过执行第一个谓词并执行 ANY IN 查询来做一个肮脏的解决方法。它的蹩脚:(因为我正在其他地方执行ordersPredicate以及稍后在管道中..
let fetchRequest = NSFetchRequest()//blah
fetchRequest.predicate = orderPredicate
let orders = //execute fetch
let subQueryPredicate = NSPredicate(format: "SUBQUERY(orders, $x, ANY $x in %@).@count > 0", orders)
【问题讨论】:
-
您能否发布您的订单类/定义并解释您想要实现的目标?
-
在您不需要子查询的解决方法中,
ANY orders in %@就可以了。为什么将returnObjectsAsFaults设置为false? -
如果你想在子查询中使用谓词,谓词应该是
$x.orderNumber = 10,with$x。可以转换谓词,但重新设计管道可能更容易。 -
感谢您的建议。 @vikingosegundo 我正在尝试查询与订单有 toMany 关系的分支实体。基本上我想查询订单谓词中的任何分支。
-
@Willeke 我复制了该代码,但在上下文中设置 returnObjectsAsFalse 没有意义。感谢您的建议,我正在考虑重新设计一些东西
标签: swift core-data nspredicate nsexpression