仅适用于EF加载过滤的子条目

问题描述 投票:0回答:1

说我有典型的学生和课程,它们作为实体拉出并通过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 课程...

c# entity-framework linq lambda lazy-loading
1个回答
0
投票

所以您有学生和课程。每个学生参加零个或多个课程。我认为零个或多个学生(多对多)可以参加课程。在我看来,您设计的每个课程都只能由一个学生(一对多)参加。

如果您确实打算一对多,则您的课程类别应稍作更改:

© www.soinside.com 2019 - 2024. All rights reserved.