获取具有最大属性值的实体以及使用 nspredicate 的一种关系

Fetch entity with max attribute value as well as in to one relationship using nspredicate

例如,我的应用有两个实体:Department <--->> Employee。我想获取一个 employee 对象,它在特定的 department 对象中具有最大 salary 值。 salaryEmployee 上的属性。

我尝试了以下代码:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"department == %@ && salary == max(salary)", self.department];

但是没有任何对象返回。

使用 nspredicate 完成此任务的最有效和最正确的方法是什么?

谁能帮帮我?谢谢。

您应该修改谓词以仅过滤部门,然后使用排序描述符按薪水降序对结果进行排序。然后设置fetch limit为1,这样就只获取到薪水最高的Employee:

NSFetchRequest *fetch = [NSFetchRequest fetchRequestWithEntityName:@"Employee"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"department == %@", self.department];
NSSortDescriptor *salarySort = [NSSortDescriptor sortDescriptorWithKey:@"salary" ascending:NO];
fetch.sortDescriptors = @[salarySort];
fetch.fetchLimit = 1;

一个有效的解决方案是只使用关系而不是获取请求。 Core Data 在后台进行优化,因此您不必担心性能或内存问题。

Employee *highestPaid = [department.employees sortedArrayUsingSortDescriptors:
  @[[NSSortDescriptor sortDescriptorWithKey:@"salary" ascending:NO]]].firstObject