0

我对我的 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)

我怎么能改变它以包括那些呢?

4

1 回答 1

0

假设您的student实体对实体具有Class类成员资格的 nav 属性,并且Class实体对实体具有 nav 属性Groups,而该Group实体又具有对 nav 属性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 } );

然后,您可以做任何您想做的事情classesViaGroups-classesViaStudents组合它们,按组或类构建查找或字典等。

于 2013-03-30T07:51:15.307 回答