查询实体

查询的结果通常会返回一个NSArray结果。

基本查询

从持久化存储(PersistantStore)中查询出所有的Person实体

NSArray *people = [Person MR_findAll];

查询出所有的Person实体并按照 lastName 升序(ascending)排列

NSArray *peopleSorted = [Person MR_findAllSortedBy:@"lastName" ascending:YES];

查询出所有的Person实体并按照 lastName 和 firstName 升序(ascending)排列

NSArray *peopleSorted = [Person MR_findAllSortedBy:@"lastName,firstName" ascending:YES];

查询出所有的Person实体并按照 lastName 降序,firstName 升序(ascending)排列

NSArray *peopleSorted = [Person MR_findAllSortedBy:@"lastName:NO,firstName" ascending:YES];

//或者

NSArray *peopleSorted = [Person MR_findAllSortedBy:@"lastName,firstName:YES" ascending:NO];

查询出所有的Person实体 firstName 为 Forrest 的实体

Person *person = [Person MR_findFirstByAttribute:@"firstName" withValue:@"Forrest"];

高级查询

使用NSPredicate来实现高级查询。

NSPredicate *peopleFilter = [NSPredicate predicateWithFormat:@"department IN %@", @[dept1, dept2]];
NSArray *people = [Person MR_findAllWithPredicate:peopleFilter];

返回 NSFetchRequest

NSPredicate *peopleFilter = [NSPredicate predicateWithFormat:@"department IN %@", departments];
NSFetchRequest *people = [Person MR_requestAllWithPredicate:peopleFilter];

自定义 NSFetchRequest

NSPredicate *peopleFilter = [NSPredicate predicateWithFormat:@"department IN %@", departments];

NSFetchRequest *peopleRequest = [Person MR_requestAllWithPredicate:peopleFilter];
[peopleRequest setReturnsDistinctResults:NO];
[peopleRequest setReturnPropertiesNamed:@[@"firstName", @"lastName"]];

NSArray *people = [Person MR_executeFetchRequest:peopleRequest];

查询实体的个数

返回的是 NSNumber 类型

NSNumber *count = [Person MR_numberOfEntities];

基于NSPredicate查询条件过滤后的实体个数

NSNumber *count = [Person MR_numberOfEntitiesWithPredicate:...];

返回的是 NSUInteger 类型

+ (NSUInteger) MR_countOfEntities;
+ (NSUInteger) MR_countOfEntitiesWithContext:(NSManagedObjectContext *)context;
+ (NSUInteger) MR_countOfEntitiesWithPredicate:(NSPredicate *)searchFilter;
+ (NSUInteger) MR_countOfEntitiesWithPredicate:(NSPredicate *)searchFilter inContext:(NSManagedObjectContext *)

合计操作

NSInteger totalFat = [[CTFoodDiaryEntry MR_aggregateOperation:@"sum:" onAttribute:@"fatCalories" withPredicate:predicate] integerValue];

NSInteger fattest  = [[CTFoodDiaryEntry MR_aggregateOperation:@"max:" onAttribute:@"fatCalories" withPredicate:predicate] integerValue];

NSArray *caloriesByMonth = [CTFoodDiaryEntry MR_aggregateOperation:@"sum:" onAttribute:@"fatCalories" withPredicate:predicate groupBy:@"month"];

从指定上下文中查询

NSArray *peopleFromAnotherContext = [Person MR_findAllInContext:someOtherContext];

Person *personFromContext = [Person MR_findFirstByAttribute:@"lastName" withValue:@"Gump" inContext:someOtherContext];

NSUInteger count = [Person MR_numberOfEntitiesWithContext:someOtherContext];