获取具有最大属性值的实体以及使用 nspredicate 的一种关系
Fetch entity with max attribute value as well as in to one relationship using nspredicate
例如,我的应用有两个实体:Department
<--->> Employee
。我想获取一个 employee
对象,它在特定的 department
对象中具有最大 salary
值。 salary
是 Employee
上的属性。
我尝试了以下代码:
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
例如,我的应用有两个实体:Department
<--->> Employee
。我想获取一个 employee
对象,它在特定的 department
对象中具有最大 salary
值。 salary
是 Employee
上的属性。
我尝试了以下代码:
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