代码之家  ›  专栏  ›  技术社区  ›  Mike Weller

核心数据任意介于谓词之间

  •  4
  • Mike Weller  · 技术社区  · 14 年前

    我正在尝试创建nspredicate以查找在特定日期范围内包含“会话”的“项目”。我刚开始试过:

    [NSPredicate predicateWithFormat:@"ANY sessions.date BETWEEN {$STARTDATE, $ENDDATE}"];
    

    但我有个例外:

    *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason:
       'to-many key not allowed here'
    

    似乎两者之间没有这样的关系。我也限制使用()和and子句,这意味着我不能使用如下内容:

    [NSPredicate predicateWithFormat:@"ANY (sessions.date > $STARTDATE && sessions.date < $ENDDATE)"];
    

    如果我尝试,我会得到一个解析错误。当然,sessions.date确实是一个集合,所以它看起来没有什么意义。

    我该怎么做?

    谢谢

    更新:请注意:

    [NSPredicate predicateWithFormat:@"ANY sessions.date > $STARTDATE && ANY sessions.date < $ENDDATE"];
    

    不正确,因为它返回一个项目,其中某个会话大于开始日期,而另一个会话小于结束日期,但两者之间没有会话。

    1 回复  |  直到 14 年前
        1
  •  11
  •   Barry Wark    14 年前

    我想这是一个你需要 SUBQUERY 表达式:

    [NSPredicate predicateWithFormat:@"SUBQUERY(sessions, $s, $s.date BETWEEN {$STARTDATE, $ENDDATE}).@count > 0"];