[asp.net-mvc]关联列表为其他类 MVC (LINQ) 吗?

标签: Asp.net-MVC Linq C#
发布时间: 2017/3/25 4:36:42
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有两节课,教室和时间表。教室里有一串的时间表︰

public class Classroom
{
    public int ClassroomId { get; set; }

    public string Name { get; set; }

    public List<Schedule> Schedules { get; set; }
}

 public class Schedule
{
    public int ScheduleId { get; set; }

    public string Entry { get; set; }
    public string Exit { get; set; }

    public string ClassroomId { get; set; }
    public Classroom Classroom { get; set; }
}

然后我想要在视图中显示与课堂相关联的所有日程安排。我想使用 LINQ,但看不到我如何可以使用它时我想要的时间表并不是只有一个列表日程安排。 有人能帮我吗?或者也许告诉我其他的办法做到这一点吗? 谢谢

顺便说一句我使用 MVC 4 但我还可以使用 MVC 5

解决方法 1:

如果您使用实体框架中,那么您必须使用 virtual 属性标记为 SchedulesClassroom 作为导航属性的属性。导航属性允许您从一个实体导航到"连接"的实体。

Classrrom 执行︰

public virtual ICollection<Schedule> Schedules { get; set; }

Schedule 执行︰

public virtual Classroom Classroom { get; set; }

然后启用 LazyLoading 如果您已手动将其禁用。 在此之后,您可以使用︰

var classroom = db.Classrooms.FirstOrDefault(x => x.ClassroomId == clasroomId); // fetch it from the database
var schedules = classroom.Schedules.ToList(); // It will fetch all schedules associated with that classroom

顺便说一句,在前面的方法会将两个不同的查询发送到数据库。如果你不想这出于某种原因,你可以使用 Include() 方法来加载 Schedules 热切。在这种情况下, Join 查询将发送到数据库。

然后,它将为︰

var schedules = db.Classrooms
    .Include(x => x.Schedules)
    .FirstOrDefault(x => x.ClassroomId == clasroomId)
    .Select(x => x.Schedules)
    .ToList();
赞助商