【问题标题】:NSFetchedResultController with SUMNSFetchedResultsController 与 SUM
【发布时间】:2013-03-05 03:24:45
【问题描述】:

我应该如何通过第一个属性获取数据并将第二个属性的值相加?

通过简单的获取我有:

但我只需要在 1 行中显示相同的 ZINGREDIENT 并将 ZCOUNT 的值相加:

是这样的:

select ZINGREDIENT, sum(ZCOUNT) 
from Table
group by ZINGREDIENT

【问题讨论】:

    标签: ios core-data nsfetchedresultscontroller


    【解决方案1】:

    这是非常简单的 NSFetchRequest 版本:

        NSManagedObjectContext* context = [object managedObjectContext];
        NSFetchRequest* request = [NSFetchRequest fetchRequestWithEntityName:@"Join"];
        [request setResultType:NSDictionaryResultType];
        [request setReturnsDistinctResults:YES];
        NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"count"];
        NSExpression* expr = [NSExpression expressionForFunction:@"sum:" arguments:@[keyPathExpression]];
        NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init];
        [expressionDescription setName:@"count"];
        [expressionDescription setExpression:expr];
        [expressionDescription setExpressionResultType:NSInteger32AttributeType];
        [request setPropertiesToGroupBy:@[@"ingredient"]];
        [request setPropertiesToFetch:@[@"ingredient",expressionDescription]];
        NSError* error = nil;
        NSArray* rez = [context executeFetchRequest:request error:&error];
    

    【讨论】:

    • 这是一个困难的版本))谢谢@Mark!我有一个包含 2 个项目 [5, 400] 的 array。一切都没事!但是,如何访问其他属性?例如,像 array.ingredient.name?
    • 结果数组包含字典,每个字典都有两个键'count'和'ingredient'。在“成分”键下,您可以找到“成分”类型的对象,因此您可以简单地访问其名称。
    • 真的)谢谢,马克!我注意到你记住了我的工作方向。你能给我一些建议,我将来如何使用这个结果列表。所以 join 实体也包含一个属性 inCart 。此属性为 BOOL:YES - “需要购买”,NO - “不需要”。我已将谓词“inCart == 1”添加到您的简单提取中。将来,我将添加从该列表中删除项目的可能性。在我的示例中,ID==20 的成分在 3 个食谱中,我应该如何将 3 个项目(在 Join 中)的“inCart”一次变为 NO?
    • 恐怕我不明白你的问题。您能否以更具描述性的方式重新表述它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    相关资源
    最近更新 更多