我对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)
我怎么能改变它以包括那些?
答案 0 :(得分:0)
假设您的student
实体具有针对类成员资格的实体Class
的导航属性,并且Class
个实体具有Groups
实体的导航属性Group
,而后者的导航属性为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
执行操作 - 组合它们,按组或类等构建查找或字典等。