所以我有典型的1:M关系:
Car can have many Models
我想要获取所有Car对象,并且只获取以'A'开头的模型名称。
我尝试了一个子查询:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Car" inManagedObjectContext:_context];
[fetchRequest setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SUBQUERY(models, $model, $model.name BEGINSWITH 'A').@count > 0"];
[fetchRequest setPredicate:predicate];
只要它具有以“A”开头的模型,这基本上会返回Car
。这没关系,但是对于所有返回的Car
,它也会返回所有Model
个,而我只想要那些以'A'开头的那些
但是只要我在更高级别的实体(Car)上运行,那么该子查询只会过滤Cars
并且根本不会过滤Models
。
我现在正在做的是在内部循环中过滤Models
(使用另一个NSPredicate
),但我宁愿在SQL端进行此过滤。
想法?
答案 0 :(得分:1)
使用谓词运行对Models
实体的抓取:
[NSPredicate predicateWithFormat:@"name BEGINSWITH 'A'"];
从结果数组NSArray *result
中,您可以获得KVC的所有Cars
:
[result valueForKey:@"car"];
假设你的1:M Cars
到Models
关系有1:1的反比关系(顺便说一下,你应该使用反向关系来保持对象图的一致性)。
如果您只想要一组唯一的Cars
:
[result valueForKeyPath:@"@distinctUnionOfObjects.car"];
或
NSSet *cars = [NSSet setWithArray:[result valueForKey:@"car"]];