我有三个实体:机构,课程,学生 一个机构可以有很多课程,一个课程只能有一个机构(1 - 多个) 课程可以有很多学生,学生可以参加很多课程(很多 - 很多)。
计算机构的课程非常简单,其关系名为“课程”:
int numberCourses = institution.course.count;
我的问题:
我如何计算机构中的学生人数? 在实体课程中,我与实体学生有“学生”关系。如何从通过课程到学生访问?
注意:学生可以成为许多课程的成员,因此他可以成为许多院校的成员。
说它简单,类似于上面的代码行,我想要这个:
机构 - > 所有课程 - > student.count
谢谢你的帮助!! 下进行。
答案 0 :(得分:2)
有两种不同的解决方案。你可以得到该机构的所有学生和 算上他们:
NSSet *students = [institution valueForKeyPath:@"courses.students"];
NSUInteger numberOfStudents = [students count];
(我已经使用了复数形式来实现多种关系,我发现它更直观。)
或者您为与该机构相关的学生构建了获取请求:
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Student"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY courses.institution == %@", institution];
[request setPredicate:predicate];
NSUInteger numberOfStudents = [context countForFetchRequest:request error:&error];
第二种解决方案的优点是 Student 对象和中间 Course 对象不会加载到内存中。完成对象数量的计数 在SQLite级别。