NSPredicate 以筛选关系



假设我有个人和宠物实体,以及一对多关系,所以人有一个宠物列表。目前,我可以使用此谓词按宠物的年龄进行过滤(为方便起见,在 Swift 和 Objective-C 中(

NSPredicate(format: "pets.age > 3")
[NSPedicate predicateWithFormat:@"pets.age > 3"]

但这相当不舒服,也不是很健壮——因为宠物实体可能会从许多其他实体(即医生、其他宠物兄弟姐妹、宠物玩具等(中查询——只是为了你的想象(。

我想做什么:

NSPredicate(format: "pets MATCH %@", NSPredicate(format: "age > 3"))
[NSPedicate predicateWithFormat:@"pets MATCH %@", [NSPedicate predicateWithFormat:@"age > 3"]]

所以我可以 Pet 实体给我正确的年龄谓词,然后在任何其他谓词中使用它。如何存档?我想在iOS设备上的CoreData上使用它,因此CoreData将从中获得哪个SQL查询非常重要,因为性能很重要。

您可以将%K用作谓词字符串中的键路径占位符

NSPredicate(format: "%K > %@", "age", "3")

因此,根据您的需要,您可以在创建谓词时使用一些具有不同运算符的常量

let greaterThanPredicate = "%K > %@"
let equalPredicate = "%K = %@"

等等,或者某种工厂类,如果你的要求更复杂。

不确定我是否正确地得到了你想要得到什么,但似乎子查询是你需要的。以这里为例

最新更新