2015-04-04 57 views
2

例如,我的應用程序有兩個實體:Department < --- >>Employee。我想獲取一個employee對象,該對象在特定對象中具有最大值。 salaryEmployee上的一個屬性。使用max屬性值以及使用nspredicate的一個關係獲取實體

我嘗試下面的代碼:

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

但是,沒有任何一個對象返回。

使用nspredicate完成此任務的最有效和最正確的方法是什麼?

任何人都可以幫到我嗎?謝謝。

+0

你有什麼錯誤嗎? – Wain 2015-04-04 08:03:01

回答

0

您應該修改謂詞以僅過濾部門,但隨後使用排序描述符按工資降序對結果進行排序。然後將提取限制設置爲1,因此您只能獲得薪水最高的員工:

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; 
+0

謝謝,這種方式應該工作!但我不能確定它是在覈心數據上進行這種查詢的有效方式,因爲我的應用程序有大量數據集。 – 2015-04-04 08:16:12

0

一個有效的解決方案是僅使用關係而不是提取請求。核心數據在後臺進行優化,因此您無需擔心性能或內存問題。

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