最有效的方法来获得平均值,同时也筛选出一些对象
我试图得到一个属性在一个子实体的平均值,同时也试图只包括一组select的logging。
我的核心数据模型中有两个实体:Invoice和InvoiceDetail。
Invoice:<br> invoiceNum - attribute<br> invoiceDate - attribute<br> invoiceDetails - one-to-many relationship to InvoiceDetail InvoiceDetail:<br> itemAmount - attribute<br> itemType - attribute<br> invoice - one-to-one relationship to Invoice<br>
如果我只想得到整个发票的itemAmount的平均值,我将使用以下(发票是一个NSManagedObject):
float avgAmount = [[invoice valueForKeyPath:@"invoiceDetails.@avg.itemAmount"] floatValue];
但是,我试图只得到itemType = 1的对象的平均值。我可以循环通过invoiceDetail项目,并手动执行此操作,但我知道这将导致性能问题。 我不确定要做这件事的最好方法是什么。
谢谢你的帮助。
您可以使用包含expression式的获取请求来执行此操作,如下所示:
- (NSDictionary *)myFetchResults { NSFetchRequest *request = [[NSFetchRequest alloc] init]; request.entity = [NSEntityDescription entityForName:@"InvoiceDetail" inManagedObjectContext:myContext]; request.predicate = [NSPredicate predicateWithFormat:@"itemType = %@", [NSNumber numberWithInt:1]]; request.resultType = NSDictionaryResultType; NSExpressionDescription *aveExDescr = [[NSExpressionDescription alloc] init]; [aveExDescr setName:@"myAverage"]; [aveExDescr setExpression:[NSExpression expressionForFunction:@"average:" arguments:[NSArray arrayWithObject: [NSExpression expressionForKeyPath:@"itemAmount"]]]]; [aveExDescr setExpressionResultType:NSFloatAttributeType]; request.propertiesToFetch = [NSArray arrayWithObject:aveExDescr]; NSError *err = nil; NSArray *results = [self.moContext executeFetchRequest:request error:&err]; [request release]; [err release]; return results; }
取回将返回一个字典,您可以访问,如下所示:
NSArray *results = [self myFetchResults]; NSDictionary *resultsDictionary = [results lastObject]; NSNumber *average = [resultsDictionary objectForKey:@"myAverage"];
请注意,此代码尚未经过testing。 如果你正在使用NSDecimalAttributeType
,你也可以使用NSDecimalAttributeType
而不是floattypes。
- URLForUbiquityContainerIdentifier总是返回零
- 从设备上删除应用程序后,无法创buildNIL模型的NSPersistentStoreCoordinator
- 如何使用Objective-C将audio数据保存到CoreData或从CoreData获取audio数据?
- 从CoreData在NSDictionary中制作嵌套的JSON
- 核心数据:以任何方式来获取多个实体?
- CoreData的iOS – 如何创build对象的唯一ID?
- 如何从Core Data中的持久性存储中删除所有对象?
- 错误:在更改核心数据模型后重复架构armv7的符号
- NSFetchedResultsController不对encryption的属性进行sorting