Entity framework 多表查询问题
有三张表:老师 班级 学生 关系是这样的
老师(1)→班级(1)→学生(N)
老师表结构:
public class Teacher
{
public Guid ID { get; set; }
public string Name { get; set; }
[Display(Name = "班级ID")]
public Guid? GradeID { get; set; }
public virtual Grade Grades { get; set; }
}
学生表结构:
public class Student
{
public Guid ID { get; set; }
public string Name { get; set; }
[Display(Name = "班级ID")]
public Guid GradeID { get; set; }
}
班级表结构:
public class Grade
{
public Guid ID { get; set; }
public string Name { get; set; }
public virtual ICollection<Student> Students { get; set; }
}
现在的查询语句:
看老师所在的班级:
var gen = db.Teachers.Include("Grades").ToList();
看班级所有的学生:
var gen = db.Grades.Include("Students").ToList();
我现在想看者某位老师所教的所有学生:
select dbo.Student.Name from dbo.Teacher left join dbo.Grade on dbo.Grade.ID=dbo.Teacher.GradeID
left join dbo.Student on dbo.Student.GradeID=dbo.Grade.ID where dbo.Teacher.Name='老师1'
请问如何实现呢 Entity?Framework SQL .Net ASP.Net Linq
[解决办法]
var query=from t in db.Teacher
where t.Name=="老师1"
join gd in db.Grade on gd.ID equals t.GradeID into leftGroup
from gd in leftGroup.DefalutIfEmpty()
join s in db.Student on s.GradeID equals gd.ID into lg2
from s in lg2.DefaultIfEmpty()
select new {Name=s==null?"":s.Name};
[解决办法]
用lamda表达式当然也是可以的
不过对于这样的多表查询,用lamda表达式写出来,在可读性上就差了很多了,所以不建议用