使用另一个expression式作为sum:expression的参数从NSManagedObject获取聚合数据

是否可以使用expression式作为sum: expression的参数?

我有实体( NSManagedObject类) Drink属性costPerDrinknumberOfDrinksdrinkingDate

我想在一段时间内得到总成本( numberOfDrinks乘以costPerDrink )的总和。 虽然我没有任何问题得到单一财产总和(例如在时间段内数字的总和),当我尝试使用另一个(乘法)expression式的和expression式时,我得到错误:

 NSInvalidArgumentException, reason: Unsupported argument to sum : ( "costPerDrink * numberOfDrinks" ) 

见代码:

 // Init fech NSFetchRequest *request = [[NSFetchRequest alloc] init]; NSEntityDescription *entity = [NSEntityDescription entityForName:@"Drink" inManagedObjectContext:[Service appContext]]; [request setEntity:entity]; // Return dictionary [request setResultType:NSDictionaryResultType]; // Set conditions [request setPredicate:[NSPredicate predicateWithFormat:@"(drinkingDate>=%@) AND (drinkingDate<=%@)", self.startDate, self.endDate]]; // Set 1st column to be returned - count of drinks NSExpression *drinksExpression = [NSExpression expressionForKeyPath:@"numberOfDrinks"]; NSExpression *sumDrinksExpression = [NSExpression expressionForFunction:@"sum:" arguments:[NSArray arrayWithObject:drinksExpression]]; NSExpressionDescription *sumDrinksResultDescription = [[NSExpressionDescription alloc] init]; [sumDrinksResultDescription setName:@"sumDrinks"]; [sumDrinksResultDescription setExpression:sumDrinksExpression]; [sumDrinksResultDescription setExpressionResultType:NSInteger32AttributeType]; // Set 2nd column to be returned - total cost NSExpression *costExpression = [NSExpression expressionForKeyPath:@"costPerDrink"]; NSExpression *totalExpression = [NSExpression expressionForFunction:@"multiply:by:" arguments:[NSArray arrayWithObjects:costExpression, drinksExpression, nil]]; NSExpression *sumCostExpression = [NSExpression expressionForFunction:@"sum:" arguments:[NSArray arrayWithObject:totalExpression]]; NSExpressionDescription *sumCostResultDescription = [[NSExpressionDescription alloc] init]; [sumCostResultDescription setName:@"sumCost"]; [sumCostResultDescription setExpression:sumCostExpression]; [sumCostResultDescription setExpressionResultType:NSDecimalAttributeType]; // Add expressions to fetch [request setPropertiesToFetch:[NSArray arrayWithObjects: sumDrinksResultDescription, sumCostResultDescription, nil]]; // Execute fech NSError *error; NSArray *result = [[Service appContext] executeFetchRequest:request error:&error]; 

我完全理解,特定的问题可以通过添加自动计算totalCost财产Drink实体,然后使用sum:在获取没有multiply:by:expression式,但问题仍然 – 是否有可能使用expression式作为sum:expression式的参数?