让我们假设我拥有“人”和“宠物”实体,并且具有一对多关系,因此“人”具有一个宠物列表。目前,我可以使用该谓词按宠物的年龄进行过滤(为方便起见,在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上使用它,所以SQL查询CoreData脱离它非常重要,因为性能很重要。
答案 0 :(得分:1)
您可以在谓词字符串中使用%K
作为键路径占位符
NSPredicate(format: "%K > %@", "age", "3")
因此,根据您的需要,可以在创建谓词时使用一些带有不同运算符的常量
let greaterThanPredicate = "%K > %@"
let equalPredicate = "%K = %@"
等等,或者某种工厂类,如果您的要求更复杂。
答案 1 :(得分:0)
不确定我正确地获得了您想要的东西,但似乎子查询就是您所需要的。以here为例