数据检索使用三个实体而不使用手动循环

时间:2014-05-14 12:02:13

标签: ios core-data nspredicate

我有三个实体。

http://oi60.tinypic.com/2nqbh2q.jpg

我需要检索教授某个学生的所有讲座。 到目前为止,我能够提出的解决方案是

首先使用子查询来检索学生所需的所有课程

  

NSPredicate * predicate = [NSPredicate   predicateWithFormat:@“SUBQUERY(学生,$ student,$ student.name ==   '学生二')。@ count> 0" ];

我执行获取的请求以获取fetchedObjects。

接下来,我将所有讲座对象与fetchedObjects进行比较。在fetchedObjects中开设课程的讲座是教授相关学生的人。

有没有更简洁的方法来做这个而不用手工比较? 我的意思是我可以单独使用谓词吗?

2 个答案:

答案 0 :(得分:0)

您想要检索“课程”实体或“讲师”实体吗?

对于课程,您可以尝试使用此谓词

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"students.name = %@",NAME];

现在你有课程实体,你也可以得到讲师,

对于讲师你可以尝试

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY courses.@unionOfArrays.students.name = %@",NAME];

答案 1 :(得分:0)

要获取所有具有给定学生课程的讲师,请使用谓词

[NSPredicate predicateWithFormat:@"SUBQUERY(courses, $c, ANY $c.students.name == %@).@count > 0", studentName]

备注:在您的第一个示例(为学生提取所有课程)中,您不需要提示:

[NSPredicate predicateWithFormat:@"ANY students.name == %@", studentName]