说我有典型的学生和课程,它们作为实体拉出并通过EF6自动生成。范例
class Student {
string name,
virtual ICollection<Course> Courses
virtual ICollection<A> example a
virtual ICollection<B> example b
virtual ICollection<C> example c
etc...
}
class Course {
DateTime courseDate,
virtual Student Student
etc...
}
我希望能够获得明天上一门课程的学生列表,并将该门课程列在子列表中。 (假设每天最多1门课程)
我尝试过的事情。...
List<Student> Method 1 (DateTime date)
{
ctx.Configurations.LazyLoadingEnabled = false;
return (from s in ctx.Students.Include(x=>x.Course)
join c in ctx.Courses
where c.courseDate == date
select s).ToList();
}
结果:有课程的学生列表(但课程对象中没有)
List<Student> Method 2 (DateTime date)
{
return ctx.Students.Where(x=>x.Courses.Any(y=>y.courseDate==date)).ToList()
}
结果:具有所有属性且未过滤的学生列表。
List<Student> Method 3 (DateTime date)
{
ctx.Configurations.LazyLoadingEnabled = false;
return ctx.Students.Include(x=>x.Courses).Where(x=>x.Courses.Any(y=>y.courseDate==date)).ToList()
}
结果:仅附有课程属性但仍未过滤的学生名单。
List<Student> Method 4 (DateTime date)
{
ctx.Configurations.LazyLoadingEnabled = false;
return
ctx.Students.Include(x=>x.Courses).Where(x=>x.Courses.Select(y=>y.courseDate).Contains(date)).ToList()
}
结果:与上面相同
列表继续。...]
我不希望在初始查询后就将数据拉出并过滤。
任何人都可以帮忙。
说我有典型的学生和课程,它们作为实体拉出并通过EF6自动生成。示例类学生{字符串名称,虚拟ICollection
所以您有学生和课程。每个学生参加零个或多个课程。我认为零个或多个学生(多对多)可以参加课程。在我看来,您设计的每个课程都只能由一个学生(一对多)参加。
如果您确实打算一对多,则您的课程类别应稍作更改: