【问题标题】:How to get data from 3 related entities using LINQ?如何使用 LINQ 从 3 个相关实体获取数据?
【发布时间】:2017-07-02 21:20:39
【问题描述】:

我有一个学生班、程序班和会话班。我想根据他的 rollnosessionNameprogramNamepassword 选择一个学生。
program 和 session 类与学生类具有一对多的关系。

这是会话类。

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 语法中使用它。

【问题讨论】:

  • 你有什么计划吗,对于改变设计的其他明智的回答可以帮助你。

标签: c# sql entity-framework linq


【解决方案1】:

您可以使用以下代码:

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 和多个&amp;&amp; 的性能难道不是比成吨的单个Wheres 高得多吗?
  • 没关系,他们是一对
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多