假设我有个人和宠物实体,以及一对多关系,所以人有一个宠物列表。目前,我可以使用此谓词按宠物的年龄进行过滤(为方便起见,在 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 = %@"
等等,或者某种工厂类,如果你的要求更复杂。
不确定我是否正确地得到了你想要得到什么,但似乎子查询是你需要的。以这里为例