使用Linq语句进行多表查询总结
在MVC做项目中有时要通过数据库一同查询多个表中的数据就是多表查询数据了
在建立连接多表时我们首先要清楚我们要用到的那几个表,找出表中的主键ID和他们的外键分清他们的主次关系 主表通过外键ID找到其他关联表
以下图为例:
首先找到公告表作为主表因为他外键ID连接到关联的表最多 通过外键NoticeTypeDetailID找到公告类型明细表 、UserID找到用户表 进行连接 :
tbNotices in myModels.PW_NoticeTable//发布公告表
公告表连接公告类型明细表:
join tbNoticeTypeDetail in myModels.SYS_NoticeTypeDetail on tbNotices.NoticeTypeDetailID//公告类型明细表
equals tbNoticeTypeDetail.NoticeTypeDetailID
公告表连接用户表:
join tbUser in myModels.PW_User on tbNotices.UserID equals tbUser.UserID//用户表
其下级用户表连接教师表同理也一样:
户表连接教师表
join tbTeacher in myModels.PW_Teacher on tbUser.UserID equals tbTeacher.UserID//教师表
连接好的表通过外键连接进行获取在主表相应ID对应下级表的数据
NoticeID = tbNotices.NoticeID,
UserID = tbNotices.UserID,
NoticeTypeDetailID = tbNotices.NoticeTypeDetailID,
AcademeID = tbNotices.AcademeID,
NoticeName = tbNotices.NoticeName,
ReleaseTime = tbNotices.ReleaseTime,
schoolRelated = tbNotices.schoolRelated,
NoticeContent = tbNotices.NoticeContent,
BrowsingTimes = tbNotices.BrowsingTimes,
Overhead = tbNotices.Overhead,
New = tbNotices.New,
Editor = tbTeacher.TeacherName,
NoticeTypeName = tbNoticeType.NoticeTypeName,
NoticeTypeID = tbNoticeType.NoticeTypeID,
NoticeTypeDetailName = tbNoticeTypeDetail.NoticeTypeDetailName,
ReleaseTimeStr = tbNotices.ReleaseTime.ToString()
为了方便阅读通过倒序的方式排列 :
orderby tbNotices.NoticeID descending
为了确保获取数据进行一些判断
比如:公告名称不为空
if (!string.IsNullOrEmpty(noticeName))
{
noticeName = noticeName.Trim();
items = items.Where(p => p.NoticeName.Contains(noticeName));
}
类型ID不为空:
if (noticeTypeId > 0)
{
items = items.Where(p => p.NoticeTypeID == noticeTypeId);
}
最后获取总数据进行分页和数据返回
int intTotalRow = items.Count();//总行数
List listNotices = items.Skip(layuiTablePage.GetStartIndex()).Take(layuiTablePage.limit).ToList();//分页
LayuiTableData layuiTableData = new LayuiTableData
{
count = intTotalRow,
data = listNotices
};
return Json(layuiTableData, JsonRequestBehavior.AllowGet);