我有以下数据模型:
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,我应该构建什么谓词?
我的想法:
这样:
[NSPredicate predicateWithFormat:@"%@ >= startTime AND %@ <= endTime", theTime]
然后获取一系列活动:
for (Activity *activity in activities)
{
[theSet add:activity.group];
}
所以我得到了一组在TheTime上至少有一个活动的唯一群组?
有没有其他方法可以在没有后处理的情况下进行提取?
谢谢!
编辑:
我可以这样做:
[NSPredicate predicateWithFormat:@"%@ >= activities.startTime AND %@ <= activities.endTime", theTime]
???
答案 0 :(得分:0)
如果我理解你的问题,是的。
您可以针对Group
而非Activity
实体进行操作。通过这种方式,您可以避免获取第一个Activity
ies,然后应用过滤器。由于activities
不是标量值,因此您需要谓词修饰符(ANY
,ALL
等)或SUBQUERY。
关于您的问题,我会执行以下操作:
[NSPredicate predicateWithFormat:@"(SUBQUERY(activities, $x, $x.startTime >= %@ and $x.endTime <= %@).@count > 0)", theStartTime, theEndTime];
关于谓词,我想yuo想找到包含在特定范围内的Group
个Activity
。
试着让我知道。希望有所帮助。