2010-11-14 109 views
0

我有3个实体教师主题学年SchoolYearSubject。 SchoolYear,Teacher and Subject have many SchoolYearSubject。 SchoolYear应该有许多主题,每个主题都有一位教师,所以我使用SchoolYearSubject来存储这种关系。C#实体框架:减去实体

class Teacher { ICollection<SchoolYearSubject> } 
class Subject { ICollection<SchoolYearSubject> } 
class SchoolYear { ICollection<SchoolYearSubject> } 
class SchoolYearSubject { Teacher, Subject, SchoolYear } 

例如: 我们有学年2010年,三个科SA,SB和SC和3位老师TA,TB,TC。

2010年的学年有两门学科sA和sC,分别是tA和tC,所以它有2个SchoolYearSubject实体,一个参照sA科目和tA老师,一个参加sC科目和tC老师。

我该如何为每个SchoolYear获得那些尚未在该SchoolYear中的科目,而不储存已经在SchoolYear中的科目的当地信息?

我尝试使用

SchoolYear SchoolYear = (SchoolYear 2010); 
Db.Subjects.Except(SchoolYear.SchoolYearSubjects.Select(schoolYearSubject => schoolYearSubject.Subject)).ToList() 

但它不工作,导致NotSupportedException异常“无法创建类型‘SchoolYearSubject’的恒定值,只有原始类型('如的Int32,String和Guid')在这方面得到了支持。“如预期。

回答

1

我假设你的Subject类有一个ID?您可以创建一个您不想加载和使用的ID的数组:Contains

var subjectIDsInSchoolYear = SchoolYear.Subjects.Select(s => s.ID).ToArray(); 

var query = from s in Db.Subjects 
      where !subjectIDsInSchoolYear.Contains(s.ID) 
      select s; 

var result = query.ToList();