我正在尝试找出在多对一关系中检索单个最新结果的最有效方法。
示例:
实体A-团队(名称)实体B-员工(名称,已创建)
团队<-->>员工
我想在Employee上创建一个fetch请求,它返回每个团队最近创建的员工。
显然,我可以遍历团队,然后运行第二个请求来为该团队找到最新的员工,但如果有数百个团队和数千名员工的潜力,这可能会变得非常繁重。
任何想法都非常感谢。
丹
发布于 2014-03-07 18:10:04
适当的sortDescriptor和设置为1的fetchBatchSize应该可以完成此任务。
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Employee"];
fetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"date" ascending:YES]];
fetchRequest.fetchBatchSize = 1;
NSError *error = nil;
NSArray *results = [context executeFetchRequest:fetchRequest error:&error];编辑:在这一点上,我终于理解了问题:如何在每个团队中获得最新的员工。我认为你不能只用一个fetchRequest就能做到这一点。但如果你仔细想想,这是非常合乎逻辑的。
NSFetchRequest *allTeamsFetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Team"];
allTeamsFetchRequest.returnsObjectsAsFaults = YES;
NSArray *teams = [context executeFetchRequest:allTeamsFetchRequest error:&error];
NSMutableArray *newPlayers = [NSMutableArray array];
for (NSManagedObject *team in teams) {
NSFetchRequest *newPlayerFetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Employee"];
newPlayerFetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"date" ascending:YES]];
newPlayerFetchRequest.fetchBatchSize = 1;
NSArray *players = [context executeFetchRequest:newPlayerFetchRequest error:&error];
[newPlayers addObjectsFromArray:players];
}因此,首先添加所有Team对象,请注意,对于此任务,我们可以使用faults,而不需要获取关系。然后,对于每个Team,我们都会得到最新的播放器。这不是“一行”的解决方案,但它做了它的工作。
https://stackoverflow.com/questions/22246324
复制相似问题