C # Entity Framework: вычитание объектов - PullRequest
0 голосов
/ 14 ноября 2010

У меня есть 3 сущности Учитель , Предмет , SchoolYear и SchoolYearSubject .SchoolYear, Teacher и Subject имеют много SchoolYearSubject.В SchoolYear должно быть много предметов, каждый из которых имеет одного учителя, поэтому я использую SchoolYearSubject для хранения этих отношений.

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

Например: у нас SchoolYear 2010, 3 предмета sA, sB и sC и 3 учителя tA, tB, tC.

SchoolYear 2010 имеет 2 предмета 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 Ответ

1 голос
/ 07 сентября 2011

Полагаю, у вашего предметного класса есть идентификатор?Вы можете создать массив идентификаторов, которые вы не хотите загружать и использовать 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...