在之前已经给大家简单的介绍了单表查询,但是往往在页面上要显示的信息是不仅仅只来源于一个表的。简单的举个例子,一个学生的个人信息,是来源学生表,但是也想知道他是哪一个学校的,读的什么专业,哪一个年级哪一个班的,这样的话,牵涉到的就不只是学生表了,还有专业表年级表班级表等等,这么多个表,那岂不是要写很多个查询语句?No,一个就够了,这个时候就需要用到我们的联合查询。
我们先来看下这三个表:PW_Student(学生表),SYS_Grade(年级表),SYS_Academe(学院表)
可以看到它们之间时通过主键ID连接在一起的。把鼠标放上去可以看到有个提示,INNER JOIN :PW_Student.AcademeID = SYS_Academe.AcademeID。
废话少说,说重点,怎么写联合查询,非常简单,四个单词搞定:join(这里放你自定义的表名字b) in(具体表名) on (表a的哪个字段)equals(连接表b的相同字段)。
public ActionResult Select()
{
var Students = (from tbStudent in myModel.PW_Student
join tbAcademe in myModel.SYS_Academe on tbStudent.AcademeID equals tbAcademe.AcademeID
join tbGrade in myModel.SYS_Grade on tbStudent.GradeID equals tbGrade.GradeID
select new
{
StudentName = tbStudent.StudentName,
AcademeName = tbAcademe.AcademeName,
GradeName = tbGrade.GradeName
}).ToList();
return Json(Students, JsonRequestBehavior.AllowGet);
}
如果还想查询更多表的信息,也是在后面再加上去就行了,一些刚开始学习MVC的人看到一些又臭又长的查询语句就觉得很头大,其实没什么好怕的,解剖开来也就那么一回事,结构非常的简单。
最后还要说明一下,这个Select new里面放的是我已经定义好了的字段,就是想要在页面上显示的字段,
为什么要定义?
不不不,你必须要定义这些字段,不然怎么来接受这些数据啊
这个字段也不是说随便定义吧,是什么类型就是什么类型的,门号对不上是会出错的,这个数据类型是常识了。