2013-03-30 54 views
0

我對我的Linq語句有比較特殊的要求。我瀏覽了幾十個例子,但找不到滿意的答案。linq with Include和多對多

我有一個課程集合,其中包含組的集合,其中包含成員的集合。我的目標是爲IQuerable創建linq語句,該語句返回用戶所屬的課程集合,並且包含用戶所屬的每個課程中的組的集合(如果有的話)。

我還是設法建立返回我想要的東西,但過濾掉所有不具有任何羣體該用戶的課程的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) 

我應該如何改變它也包括這些?

+0

什麼是'c/_set'? – Moho

+0

抱歉,忘記提及其設置爲課程的實體(DbSet ) – Bartosz

回答

0

假設你student實體有一個導航屬性的實體Class類會員,並Class實體有一個導航屬性GroupsGroup實體,進而有一個導航屬性Students

// 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