2013-03-30 3 views
0

필자는 Linq 선언문에 대한 구체적인 요구 사항을 가지고있다. 수십 가지 예제를 살펴 보았지만 만족스러운 답을 찾을 수 없었습니다.linq with Include와 many-to-many

본인에게는 회원 수납이 가능한 그룹 수 집을 포함하는 강좌 모음이 있습니다. 내 목표는 사용자가 속한 코스의 컬렉션을 반환하는 IQuerable에 대한 linq 문을 작성하고, 사용자가 속한 각 코스 내의 그룹 콜렉션을 포함합니다.

var courses2 = (from c in _set 
         from s in c.Students 
         where (s.UserName == userName) 
         from g in c.Groups 
         from m in g.Members 
         where (m.UserName == userName) 
         select c) 
         .Include(c => c.Groups) 
         .OrderBy(c => c.Title) 

가 어떻게 그것을 바꿀 수 :

내가 원하는 것을 반환하지만 해당 사용자 그룹이없는 과정을 모두 걸러 LINQ 문을 작성하는 관리 않았다 그들 내부에 속하는 그것들을 포함시키는 것인가? 당신의 student 실체를 가정

+0

무엇이'c/_set'입니까 ?? – Moho

+0

죄송합니다. 코스 (DbSet ) – Bartosz

답변

0

클래스 회원에 대한 실체 Class에 대한 탐색 속성을 가지고 있으며, Class 기관 차례로 Students에 탐색 속성을 가지고있는 Group 엔티티에 대한 탐색 특성 Groups 있습니다

// get the students to query against 
var students = db.Students.Where(s => s.UserName == userName); 

// get classes per group 
var classesViaGroups = 
    students.SelectMany(s => s.Groups) 
    .SelectMany(g => 
     g.Classes.Select(c => 
      new { GroupName = g.Name, ClassObj = g.Class })); 

// get classes by the student entities alone 
var classesViaStudents = 
    students.SelectMany(s => s.Classes) 
    .Select(c => new { GroupName = null, ClassObj = c }); 

당신을 그러면 classesViaGroupsclassesViaStudents으로 할 수 있습니다 - 그들을 결합하거나, 그룹이나 클래스 등으로 조회 또는 사전을 만드십시오.

+0

에 대해 설정 한 엔티티에 대해 언급하는 것을 잊어 버렸습니다. 나는 한 명의 학생 만 있고, 그룹의 목록을 가진 코스리스트를 생성하는 질의로 끝내고 싶어한다. – Bartosz