我的数据模型的一些背景信息:
manufacturer <-->> item <<-->> tag
我目前通过 fetchrequest 生成项目列表:
- (NSFetchRequest*) rankingRequestForItem:(Item*)item {
NSFetchRequest* r = [NSFetchRequest fetchRequestWithEntityName:@"Item"];
NSPredicate* p = [NSPredicate predicateWithFormat:@"SELF != %@",item.objectID];
r.resultType = NSDictionaryResultType;
r.resultType = NSDictionaryResultType;
r.propertiesToFetch = @[[self objectIDExpressionDescription],@"itemName",
[self rankingExpressionDescriptionForTags:[item mutableSetValueForKey:@"itemToTag"]]];
r.predicate = p;
r.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"itemName" ascending:YES]];
return r;
}
这会生成所有项目的列表。我想过滤与特定制造商有关系的项目。所以我在所有项目的列表之后添加了一个谓词,它按 selectedManufacturer 排序。
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"itemToMa = %@", selectedManufacturer];
这可行,但会抓取很多将被过滤掉的项目。对于大型数据集,我假设它会变得越来越慢,因为它会搜索所有项目,而不仅仅是与一个制造商相关的项目。我想过滤初始“rankingRequestForItem”方法中的项目。
是否可以将上面的谓词与顶部谓词一起移动并创建一个复合谓词?