【问题标题】:How to multiply two columns and sum it in CoreData?如何将两列相乘并在CoreData中求和?
【发布时间】:2014-08-18 16:00:20
【问题描述】:

我有一个货物在单据,我想将单单货物的数量和价格相乘并求和。

在 mySQL 中是这样的:SELECT SUM(price * quantity) FROM documentGoods

这是我的代码,但它不起作用。

NSFetchRequest *fetch = [[NSFetchRequest alloc] init];
[fetch setEntity:[NSEntityDescription entityForName:self.tableName inManagedObjectContext:moc]];
[fetch setResultType:NSDictionaryResultType];

NSExpression *multiplyExpression = [NSExpression expressionForFunction:@"multiply:by:" arguments:@[[NSExpression expressionForKeyPath:@"quantity"], [NSExpression expressionForKeyPath:@"price"]]];
NSExpressionDescription *expressionMultipliedDescription = [[NSExpressionDescription alloc] init];
[expressionMultipliedDescription setName:@"multiplied"];
[expressionMultipliedDescription setExpression:multiplyExpression];
[expressionMultipliedDescription setExpressionResultType:NSDecimalAttributeType];

NSExpression *sumExpression = [NSExpression expressionForFunction:@"sum:" arguments:@[[NSExpression expressionForKeyPath:@"multiplied"]]];
NSExpressionDescription *expressionSummaryDescription = [[NSExpressionDescription alloc] init];
[expressionSummaryDescription setName:@"summary"];
[expressionSummaryDescription setExpression:sumExpression];
[expressionSummaryDescription setExpressionResultType:NSDecimalAttributeType];

[fetch setPropertiesToFetch:@[expressionSummaryDescription]];
NSPredicate *searchFilter = [NSCompoundPredicate andPredicateWithSubpredicates:@[[NSPredicate predicateWithFormat:@"removed = NO"]]];
[fetch setPredicate:searchFilter];
NSError *error = nil;
NSArray *objects = [moc executeFetchRequest:fetch error:&error];
if(objects && [objects count] > 0)
    return [[objects objectAtIndex:0] valueForKey:@"summary"];
return [[NSDecimalNumber alloc] initWithFloat:.0f];

谁能帮帮我?

【问题讨论】:

  • 在 [moc executeFetchRequest:fetch error:&error] 上停止
  • 错误说明了什么?
  • 看来您不能在 Core Data 获取请求中“嵌套”表达式,比较 stackoverflow.com/questions/14122086/…(可能是“重复”问题)。
  • CoreData:错误:严重的应用程序错误。在调用 -controllerDidChangeContent: 期间,从 NSFetchedResultsController 的委托中捕获了一个异常。传递给 sum 的非属性属性:sum:(multiplied) with userInfo (null)
  • controllerDidChangeContent: 会发生什么?

标签: ios core-data sum multiple-columns


【解决方案1】:

我遇到了类似的情况,我的实体是“购物车”并且具有价格和数量字段。要从购物车中获取总和(数量 * 价格),我使用了以下代码。最后一个 NSLog 将记录所需的总购物车价格

NSFetchRequest *request = [[NSFetchRequest alloc] init];

request.entity = [NSEntityDescription entityForName:@"Cart" inManagedObjectContext:self.managedObjectContext];
request.resultType = NSDictionaryResultType;

NSExpressionDescription *productTotalDescr = [[NSExpressionDescription alloc] init];
[productTotalDescr setName:@"productTotal"];
[productTotalDescr setExpression:[NSExpression expressionForFunction:@"multiply:by:"
                                                    arguments:[NSArray arrayWithObjects:
                                                               [NSExpression expressionForKeyPath:@"price"],
                                                               [NSExpression expressionForKeyPath:@"quantity"],
                                                               nil]]];
[productTotalDescr setExpressionResultType:NSInteger64AttributeType];

request.propertiesToFetch = [NSArray arrayWithObjects:productTotalDescr, nil];

NSError *err = nil;
NSArray *results = [self.managedObjectContext executeFetchRequest:request error:&err];
NSLog(@"%@",[results valueForKeyPath:@"productTotal"]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-23
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多