навигация «многие ко многим» с помощью включения в EF4 - PullRequest
1 голос
/ 05 ноября 2010

У меня есть много-много отношений в EF4 со следующими объектами:

[Студент] - [Класс] - [Студент_Класс]

Кроме того, у меня есть [Школьная] сущность с FK на [Студент].

Если я хочу, чтобы все ученики моей школы делали:

context.School.Include("Student")

но если я хочу, чтобы в моей школе был первый класс моих учеников?

context.School.Include("Student").Include("Student_Class").Where(...

Мне не удалось заставить эту вещь работать ... Вы можете помочь ? Также более разумно написать полный выбор Linq? Спасибо John

1 Ответ

0 голосов
/ 05 ноября 2010

Если вы хотите выполнить условную активную загрузку, то вам НЕ следует использовать метод Включить .Для загрузки вашего школьного объекта, содержащего только учеников, принадлежащих к первому классу, вы можете сделать отфильтрованный прогноз , который возвращает объект анонимного типа:

var school = context.School
                    .Where(s => s.SchoolID == 1) // or any other predicate
                    .Select(s => new 
                    {
                        School = s,
                        Students = s.Student.Where(st => st.ClassID == 1)
                    }).ToList();


Другим способом было бы Метод кредитного плеча , который возвращает EntityObject:

var school = context.School.Where(s => s.SchoolID == 1).First()
var sourceQuery = school.Students.CreateSourceQuery()
                                 .Where(st => st.ClassID == 1);
school.Students.Attach(sourceQuery);

Для более подробного обсуждения этого вы также можете проверить:
Entity Framework: Как запросить данные в таблице свойств навигации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...