如何检索与“max:”表达式匹配的实体的其他属性

Posted

技术标签:

【中文标题】如何检索与“max:”表达式匹配的实体的其他属性【英文标题】:How do I retrieve additional properties for entity matching "max:" expression 【发布时间】:2013-08-09 05:12:04 【问题描述】:

我有一个 fetchRequest 可以正确返回特定键路径的最大值。设置看起来像这样:

NSExpression *keyExpression = [NSExpression expressionForKeyPath:@"distance"];
NSExpression *functionExpression = [NSExpression expressionForFunction:@"max:" arguments:@[keyExpression]];
NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init];
[expressionDescription setName:keyPath];
[expressionDescription setExpression:functionExpression];
[expressionDescription setExpressionResultType:NSInteger32AttributeType];

问题是我还需要返回与上述 NSExpressionDescription 匹配的对象上另一个属性的值。换句话说,我想要为 managedObject 返回的时间戳属性的值,从中返回 max: 值。如果我这样设置获取请求:

    NSFetchRequest* request = [NSFetchRequest fetchRequestWithEntityName:@"record"];
    request.resultType = NSDictionaryResultType;
    request.propertiesToFetch = @[expressionDescription, @"timestamp"];
    request.propertiesToGroupBy = @[@"timestamp"];

它为每个具有时间戳的记录返回一个字典,而不是只为匹配最大值的记录返回一个字典。知道如何获得我想要的结果吗?

【问题讨论】:

【参考方案1】:

构造您的获取请求以返回您想要的项目(这可以是字典或托管对象)。而不是使用最大表达式,尽管只需将 fetchLimit 设置为 1 并添加一个排序描述符,以便返回具有最大值 distance 的结果(因为它是结果集中的第一项)。

【讨论】:

谢谢韦恩。这不是一个坏方法,但我希望使用 NSExpressionDescription。到目前为止,我能够使其与 NSExpressionDescription 一起工作的唯一方法是让它返回 objectID 以及最大值,然后调用 existingObjectWithID: 来返回我想要的值。不确定还有其他方法可以解决这个问题,但我很想在这个问题上犯错! 为什么要保留表达式? 我有一个通用方法,通常只返回最大值,但希望该选项也返回最大值来自的对象的关联时间戳。 不使用表达式仍然会得到最大值。

以上是关于如何检索与“max:”表达式匹配的实体的其他属性的主要内容,如果未能解决你的问题,请参考以下文章

mybitis中对象字段与表中字段名称不匹配(复制)

Mongo:如何仅检索与某些属性匹配的子文档

核心数据 - 保存和检索属性 - 示例代码

NSPredicate 用于检查与其他变量匹配的 CoreData 属性是不是满足条件

如何在同一个数据库表上映射两个 JPA 或 Hibernate 实体

iOS:检查值是不是与核心数据中实体的任何属性匹配?