C# 如何使用LINQ从3个相关实体获取数据?

C# 如何使用LINQ从3个相关实体获取数据?,c#,sql,entity-framework,linq,C#,Sql,Entity Framework,Linq,我有学生班、计划班和课时班。我想根据学生的学号、课程名、程序名和密码选择一个学生。 课程和课时班与学生班有一对多的关系 这是课时课 public class Session { [Key] public int SessionID { get; set; } [Required] [MaxLength(30)] public string SessionName { get; set; }

我有学生班、计划班和课时班。我想根据学生的学号、课程名、程序名和密码选择一个学生。 课程和课时班与学生班有一对多的关系

这是课时课

public class Session
    {
        [Key]
        public int SessionID { get; set; }
        [Required]
        [MaxLength(30)]
        public string SessionName { get; set; }

        //Relationship ------- Navigational Properties -------------------------------
        public virtual List<Student> Students { get; set; }
        public virtual List<Teacher> Teachers { get; set; }
        public virtual List<Subject> Subjects { get; set; }
        public virtual List<Program> Programs { get; set; }
    }
这是程序课

public class Program
    {
        [Key]
        public int ProgramID { get; set; }
        [Required]
        [MaxLength(30)]
        public string ProgramName { get; set; }

        //Relationship ------- Navigational Properties -------------------------------
        public virtual List<Student> Students { get; set; }
        public virtual List<Teacher> Teachers { get; set; }
        public virtual List<Subject> Subjects { get; set; }

    }
这是学生班

public class Student
    {
        [Key]
        [Column(Order = 0)]
        public int StudentID { get; set; }
        [Required]
        [MaxLength(30)]
        public string FirstName { get; set; }
        [Required]
        [MaxLength(30)]
        public string LastName { get; set; }
        [Required]
        [MaxLength(30)]
        public string UserName { get; set; }
        [Required]
        [MaxLength(35)]
        public string Email { get; set; }
        [Required]
        [MaxLength(30)]
        public string Password { get; set; }
        [Required]
        [MaxLength(30)]
        public string FatherName { get; set; }
        [Required]
        public DateTime DOB { get; set; }
        [Required]
        [MaxLength(15)]
        public string CNIC { get; set; }
        [Required]
        public int RollNo { get; set; }

        public bool Active { get; set; }
        public bool Graduated { get; set; }
        public bool Expelled { get; set; }

        //Relationship ------- Navigational Properties -------------------------------
        public virtual List<Teacher> Teachers { get; set; }
        public virtual List<Subject> Subjects { get; set; }
        public virtual List<StudentMessage> Messages { get; set; }

        public Session Session { get; set; }
        public Program Program { get; set; }
        public Grade Grade { get; set; }
        public Attendance Attendance { get; set; }
        public StudentContact StudentContact { get; set; }
        public StudentMessage StudentMessage { get; set; }

    }
现在,我如何使用LINQ查询语法和LINQ方法语法选择给定了特定rollno、sessionName、programName和密码的学生的用户名

在数据库中,学生表包含SessionID和ProgramID


我知道Join用于从多个表中提取数据,但我不知道如何在LINQ语法中使用它。

您可以使用以下代码:

var list = dbContext.Students
    .Where(e=>e.RollNo == 10)
    .Where(e=>e.Password == "password")
    .Where(e=>e.Session.SessionName == "SessionName")
    .Where(e=>e.Session.ProgramName == "ProgramName")
    .Select(e=> e.UserName)
    .ToList();

你不明白我的问题:一个单一的Where,再加上多个&&不是比成吨的单一Where更有效吗?没关系,他们的一对就是一个。你有什么计划吗,对于设计的改变,其他方面的回答可以帮到你。