我仍在努力将自己的注意力集中在Core Data上,并且在释放SQL方面遇到了麻烦。我知道它们并不相同,但是我发现很难重新创建可以在SQL中执行的操作。我希望有人能提供帮助。

我要做的是创建客户列表并返回其当前账单的总和。我有两个实体:

客户

  • 名称
  • 地址

  • 开票
  • 客户端
  • 日期

  • 我在两个实体之间创建了一对多关系,并且我的NSEntityDescription指向客户端。

    现在我想用SQL术语进行的是这样的:
    SELECT *, SUM(amount) as Total FROM Clients INNER JOIN Billing......"
  • 可以使用一个提取请求来完成此操作还是我可以执行2个请求然后将它们合并?
  • 我可以以某种方式使用valueForKey:@"[email protected]"吗?
  • 还有人可以为中级入门者推荐一本很棒的核心数据书(或网站)吗?
  • 最佳答案

    可以使用一个提取请求完成此操作,还是可以执行2个请求然后合并它们?


    是的,可以通过一个请求完成。 see here

    /*UNTESTED*/
    - (NSNumber*) billingSumForClient:(NSManagedObjectID*)clientId
                               context:(NSManagedObjectContext*)context
    {
        NSNumber* total = nil;
        NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Billing"];
        [request setResultType:NSDictionaryResultType];
        NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"amount"];
        NSExpression *sumExpression = [NSExpression expressionForFunction:@"sum:"
                                                                arguments:[NSArray arrayWithObject:keyPathExpression]];
        NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init];
        [expressionDescription setName:@"total"];
        [expressionDescription setExpression:sumExpression];
        [expressionDescription setExpressionResultType:NSDateAttributeType];
        [request setPredicate:[NSPredicate predicateWithFormat:@"client == %@",clientId]];
        [request setPropertiesToFetch:[NSArray arrayWithObject:expressionDescription]];
        NSError *error = nil;
        NSArray *objects = [context executeFetchRequest:request error:&error];
        if (&error) {
            // Handle the error.
        } else {
            if ([objects count] > 0) {
                total = [[objects objectAtIndex:0] valueForKey:@"total"];
            }
        }
        return total;
    }
    


    我可以以某种方式使用valueForKey:@“billing。@ sum.amount”吗?


    是。 see here(@Daniel link)
    如果您的所有帐单都已经错入您当前的上下文,这可能会更快。

    关于ios - 核心数据查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16068276/

    10-13 08:24