首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

Entity framework 多表查询有关问题

2013-04-12 
Entity framework 多表查询问题有三张表:老师 班级 学生 关系是这样的 老师(1)→班级(1)→学生(N)老师表结构

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

热点排行