0

我有三个实体:机构、课程、学生 一个机构可以有很多课程,一个课程只能有一个机构(1 - 很多) 一个课程可以有很多学生,一个学生可以加入很多课程(很多 - 很多)。

计算一个机构的课程非常简单,其关系名为“课程”:

int numberCourses = institution.course.count;

我的问题:

我如何计算一个机构的学生人数?在实体课程中,我与实体学生有“学生”关系。我如何从机构通过课程访问学生?

注意:学生可以成为许多课程的成员,这样他就有可能成为许多机构的成员。

简单地说,类似于上面的代码行,我想要这个:

机构 ->所有课程-> student.count

谢谢你的帮助!!C。

4

1 回答 1

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];

第二种解决方案的优点是学生对象和中间课程对象不会加载到内存中。计算对象的数量是在 SQLite 级别完成的。

于 2013-04-28T17:50:08.960 回答