2010-11-05 2 views
1

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

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

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

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

context.School.Include("Student") 

, но если я хочу иметь 1rst класс моих студентов в моей школе?

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

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

+0

Похоже, 'Student_Class' является ассоциацией, а не юридическое лицо ... поэтому он должен быть отображен в качестве ассоциации. Таким образом, вы будете иметь свойства «Student.Classes» и «Class.Students». –

+0

Student_Class - это ассоциация, но появляется в модели. – user96547

+0

Что вы имеете в виду, должно отображаться как ассоциация? что мне делать ? – user96547

ответ

0

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

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: How to query data in a Navigation property table

Смежные вопросы