2010-11-14 4 views
0

J'ai 3 entités enseignants, Sujet, et Année scolaire SchoolYearSubject. SchoolYear, Teacher et Subject ont plusieurs SchoolYearSubject. SchoolYear devrait avoir de nombreux sujets avec chacun un enseignant, donc j'utilise SchoolYearSubject pour stocker cette relation.C# Entity Framework: entités Soustraction

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

Par exemple: Nous avons 2010 Année scolaire, 3 sujets sA, et sC et sB 3 enseignants tA, tB, tC. SchoolYear 2010 a 2 sujets sA et sC avec les enseignants tA et respectivement tC, donc il a 2 entités SchoolYearSubject, une avec une référence au sujet sA et un enseignant tA, et une avec le sujet sC et l'enseignant tC.

Comment puis-je obtenir pour chaque SchoolYear les sujets qui ne sont pas déjà dans cette SchoolYear, sans stocker des informations locales sur les sujets déjà présents dans SchoolYear?

J'ai essayé d'utiliser

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

mais il ne fonctionne pas, ce qui entraîne une NotSupportedException « Impossible de créer une valeur constante de type « SchoolYearSubject ». Seuls les types primitifs ('tels que Int32, String, et Guid ') sont pris en charge dans ce contexte. " comme prévu.

Répondre

1

Je suppose que votre classe de sujet a un ID? Vous pouvez créer un tableau des ID que vous ne voulez pas charger et utiliser 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(); 
Questions connexes