LINQ to Entities选择多对多关系中的所有条目

时间:2011-10-17 22:26:54

标签: .net linq entity-framework collections linq-to-entities

我有3个MySql表:StudentsClassesStudentsInClasses

实体框架将这些实体转换为两个实体StudentClass,每个实体使用多对多导航属性链接到另一个实体(例如Student.Classes)。

但是没有StudentsInClasses实体,所以调用的最佳方法是什么,使用LINQ to Entities,相当于SQL

SELECT StudentId, ClassId FROM StudentsInClasses;

我正在寻找一个{StudentId,ClassId}对的HashSet(或等价物),这样我就可以快速查找给定的学生是否在某个班级。 (存储此内容的最佳方式是什么?)

非常感谢。

1 个答案:

答案 0 :(得分:3)

怎么样:

var query = from @class in db.Classes
            from student in @class.Students
            select new { ClassId = @class.ID, Student = student };

var lookup = query.ToLookup(x => x.ClassId,
                            x => x.Student);

(我怀疑LookupHashSet更合适。)

编辑:如果您不想使用查询表达式:

var query = db.Classes
              .SelectMany(@class => @class.Students,
                          (@class, student) => new { ClassId = @class.ID,
                                                     Student = student });