0

我有以下数据模型:

Group(name, color, activities*) // one group may have many activities
Activity(startTime, endTime, location, Group*) // startTime and endTime are NSDate, group is an inverse relationship

因此,如果我想获得在指定 NSDate 上至少有一项活动的所有组,比如 theTime,我应该构造什么谓词?

我的想法:

  1. 首先获取所有活动
  2. 然后将他们的组放入一个集合中以删除重复的组
  3. 将 Set 转换为数组

所以:

[NSPredicate predicateWithFormat:@"%@ >= startTime AND %@ <= endTime", theTime]

然后获取一系列活动:

for (Activity *activity in activities)
{
    [theSet add:activity.group];
}

所以我得到了一组在 theTime 上至少有一个活动的独特组?

有没有其他方法可以在不进行后处理的情况下进行提取?

谢谢!

编辑:

我可不可以做:

[NSPredicate predicateWithFormat:@"%@ >= activities.startTime AND %@ <= activities.endTime", theTime]

???

4

1 回答 1

0

如果我理解你的问题,是的。

Group您可以针对而不是Activity实体来做到这一点。通过这种方式,您可以避免先获取Activityies 实体,然后再应用过滤器。由于activities不是标量值,因此您需要谓词修饰符(ANYALL等)或 SUBQUERY。

关于您的问题,我将执行以下操作:

[NSPredicate predicateWithFormat:@"(SUBQUERY(activities, $x, $x.startTime >= %@ and $x.endTime <= %@).@count > 0)", theStartTime, theEndTime];

关于谓词,我想你想找到Group包含Activity特定范围内的 ies 的 s。

试着让我知道。希望有帮助。

于 2012-07-09T08:11:24.170 回答