日期:2014-05-17  浏览次数:20527 次

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表达式写出来,在可读性上就差了很多了,所以不建议用