如何获取核心数据属性中所有条目的总和?
How to get Total Sum of all entries in a Core Data attribute?
我有一个带有实体和多个属性的核心数据数据模型。
其中一个属性是一个整数 16 (NSDecimalNumber),称为
numberOfSeconds
我想从这个属性中找到我的数据模型中所有条目的总和。
换句话说:我将在这个属性中有很多用户条目。假设用户创建了 3 个具有这些细节的条目:
1) 秒数 = 4
2) 秒数 = 2
3) 秒数 = 5
我希望能够得到应该等于 11.
的总和
在此感谢任何帮助!
看看 Collection Operators - 它类似于 SQL 聚合函数。
假设您之前将实体提取到某个集合中 entitiesCollection
。
那么它应该是这样的:
NSNumber *result = [entitiesCollection valueForKeyPath:@"@sum.numberOfSeconds"]
您可以使用 NSExpressionDescription
通过获取请求直接获取总和(无需获取托管对象本身,如果您有很多托管对象,效率会很低)。
记得为获取请求设置 NSDictionaryResultType
(如果我不这样做,我会得到 EXC_BAD_ACCESS)。
NSExpression *keyExpression = [NSExpression expressionForKeyPath:@"numberOfSeconds"];
NSExpression *sumExpression = [NSExpression expressionForFunction:@"sum:" arguments:@[keyExpression]];
NSExpressionDescription *sumDescription = [[NSExpressionDescription alloc] init];
sumDescription.name = @"sumOfSeconds";
sumDescription.expression = sumExpression;
[sumDescription setExpressionResultType:NSDecimalAttributeType];
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Entity"];
request.resultType = NSDictionaryResultType;
[request setPropertiesToFetch:@[sumDescription]];
NSError *error = nil;
NSManagedObjectContext *context = ... //get the context somehow
NSArray* fetchResult = [context executeFetchRequest:request error:&error];
NSNumber *sum = fetchResult.firstObject[sumDescription.name]; //this is your sum
我有一个带有实体和多个属性的核心数据数据模型。
其中一个属性是一个整数 16 (NSDecimalNumber),称为
numberOfSeconds
我想从这个属性中找到我的数据模型中所有条目的总和。
换句话说:我将在这个属性中有很多用户条目。假设用户创建了 3 个具有这些细节的条目:
1) 秒数 = 4
2) 秒数 = 2
3) 秒数 = 5
我希望能够得到应该等于 11.
的总和在此感谢任何帮助!
看看 Collection Operators - 它类似于 SQL 聚合函数。
假设您之前将实体提取到某个集合中 entitiesCollection
。
那么它应该是这样的:
NSNumber *result = [entitiesCollection valueForKeyPath:@"@sum.numberOfSeconds"]
您可以使用 NSExpressionDescription
通过获取请求直接获取总和(无需获取托管对象本身,如果您有很多托管对象,效率会很低)。
记得为获取请求设置 NSDictionaryResultType
(如果我不这样做,我会得到 EXC_BAD_ACCESS)。
NSExpression *keyExpression = [NSExpression expressionForKeyPath:@"numberOfSeconds"];
NSExpression *sumExpression = [NSExpression expressionForFunction:@"sum:" arguments:@[keyExpression]];
NSExpressionDescription *sumDescription = [[NSExpressionDescription alloc] init];
sumDescription.name = @"sumOfSeconds";
sumDescription.expression = sumExpression;
[sumDescription setExpressionResultType:NSDecimalAttributeType];
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Entity"];
request.resultType = NSDictionaryResultType;
[request setPropertiesToFetch:@[sumDescription]];
NSError *error = nil;
NSManagedObjectContext *context = ... //get the context somehow
NSArray* fetchResult = [context executeFetchRequest:request error:&error];
NSNumber *sum = fetchResult.firstObject[sumDescription.name]; //this is your sum