包含和多对多的linq

包含和多对多的linq,linq,include,many-to-many,iqueryable,Linq,Include,Many To Many,Iqueryable,我对我的Linq声明有相当具体的要求。我看了几十个例子,但找不到令人满意的答案 我有一套课程,一套小组,一套成员。我的目标是为IQuerable创建linq语句,它返回用户所属课程的集合,并包括用户所属的每个课程(如果有)中的组集合 我确实构建了一个linq语句,它返回我想要的内容,但过滤掉了所有没有用户所属组的课程: var courses2 = (from c in _set from s in c.Students

我对我的Linq声明有相当具体的要求。我看了几十个例子,但找不到令人满意的答案

我有一套课程,一套小组,一套成员。我的目标是为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)

我如何将其更改为也包括这些内容?

假设您的
学生
实体对于类成员身份有一个nav属性到实体
,并且
实体对于
实体有一个nav属性,而
实体又有一个nav属性到
学生

// 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 } );

然后,您可以对
classesViaGroups
classesviatudents
执行您想做的操作-将它们组合起来,按组或类建立查找或词典,等等。

对不起,忘了提到它是课程的实体集(DbSet),我不明白。我只有一个学生,实际上我希望最终得到一个查询生成的课程列表,其中包含组列表(急切加载)