Core data 使用JOIN访问NSPredicate中的核心数据实体关系

Core data 使用JOIN访问NSPredicate中的核心数据实体关系,core-data,nspredicate,Core Data,Nspredicate,我最近从direct SQLite(使用FMDB)切换到了核心数据,因此我将大量查询重写为NSPredicates。我不知道如何使用谓词进行连接 我有一个条目实体,它与一个飞机实体有一个对一关系 条目有一个名为duration的属性,飞机有一个名为categoryClass的属性 我可以这样总结所有持续时间值(假设我之前设置了上下文和请求): 但是现在我想对某些类型的飞机的所有持续时间值求和: //SQLite equivalent: SELECT TOTAL(duration) FROM en

我最近从direct SQLite(使用FMDB)切换到了核心数据,因此我将大量查询重写为
NSPredicate
s。我不知道如何使用谓词进行
连接

我有一个条目实体,它与一个飞机实体有一个对一关系

条目有一个名为
duration的属性
飞机有一个名为
categoryClass的属性

我可以这样总结所有
持续时间
值(假设我之前设置了
上下文
请求
):

但是现在我想对某些类型的飞机的所有
持续时间
值求和

//SQLite equivalent: SELECT TOTAL(duration) FROM entry LEFT JOIN aircraft ON entry.aircraftRegistration = aircraft.aircraftRegistration WHERE aircraft.categoryClass != 'Simulator' AND aircraft.categoryClass != 'Flight Training Device'"

NSArray *entries = [context executeFetchRequest:request error:&error];
NSNumber *totalDuration = [entries valueForKeyPath:@"@sum.duration ?????"];
我猜这在速记
@sum
符号中是不可能的,我可能必须在我的获取请求中使用
NSPredicate
,但我也不知道如何在谓词上执行
左连接

//This results in a crash
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"entry.aircraft.categoryClass != 'Simulator'"];

有人能帮忙吗?

我想出来了。我像以前一样提取完整的条目列表:

NSArray *entries = [context executeFetchRequest:request error:&error];
然后在该数组上,我应用另一个谓词,该谓词使用关系Aircraft实体上的条件,如下所示:

NSPredicate *predicateWithoutSim = [NSPredicate predicateWithFormat:@"aircraft.categoryClass != 'Simulator'"];
NSArray *entriesWithoutSim = [entries filteredArrayUsingPredicate:predicateWithoutSim];
然后我可以像以前一样对持续时间求和,但在新筛选的数组上:

totalDuration = [entriesWithoutSim valueForKeyPath:@"@sum.duration"];
呜呜!:)

totalDuration = [entriesWithoutSim valueForKeyPath:@"@sum.duration"];