读书人

Entity framework 多表查询有关问题

发布时间: 2013-04-12 18:33:11 作者: rapoo

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

读书人网 >asp.net

热点推荐