当查询一个表的全部数据,当然要使用到分页数据啦,layuiTablepage这个是一个类名,这类里面存放了一些分页的数据。我们需要从一个表里面查询表的全部数据,根据ID查询表的全部信息,还要进行数据类型的转换。
因为需要表与表之间的连接,所以我们用feath遍历modular里面的每一个ID,根据ID查询表里面的数据。在这里需要遍历它,查询表里面对应的操作类型的ID。
查询出来需要把两个结果放到一起,返回到表格上,所以需要一个类,而这个类里面需要包含两个表的字段,简单说就是需要把两格合到一起。
所以呢,再添加一个类
public class ModularAndDetail:Models.SYS_Modular
{
/// <summary>
/// 这个表的id合集
/// </summary>
public string DetailIds { get; set; }
public List<ModularDetail> ModularDetailVos { get; set; }
}
还要在遍历之前创建一个new对象,每遍历一次将数据传给这个对象一次。前面我们已经在这个类里面继承了这张表,所以我们可以直接把modularAndDetail给到这个表的ID字段里面。
可能上面陈述会有点乱,在这里补充一下思路吧!
我是先把modular的数据先查出来,再把modularAndDetails对应的每条数据查出来,因为两个查出来返回到页面上是无法一起显示出来的,那该怎么办呢,是不是就需要一个类,这个类里面需要包含两个表的数据,,所以我们创建了一个类名为ModularAndDetail的类。这个类接收对应的两个表的数据。然后统计数据和分页提取数据。
public ActionResult SelectModularAndDetail(LayuiTablePage layuiTablePage)
{
List<SYS_Modular> modular = (from tbModular in myModel.SYS_Modular
select tbModular).ToList();
List<ModularAndDetail> modularAndDetails = new List<ModularAndDetail>();
foreach (SYS_Modular item in modular)
{
ModularAndDetail modularAndDetail = new ModularAndDetail();
//表
modularAndDetail.ModularID = item.ModularID;
modularAndDetail.ModularName = item.ModularName;
List<ModularDetail> modularDetail = (from tbModularDetail in myModel.SYS_ModularDetail
join tbOpType in myModel.SYS_OpType
on tbModularDetail.OpTypeID equals tbOpType.OpTypeID
where tbModularDetail.ModularID == modularAndDetail.ModularID
select new ModularDetail
{
OpTypeID = tbModularDetail.OpTypeID,
OpType = tbOpType.OpType
}).ToList();
modularAndDetail.ModularDetailVos = modularDetail;
modularAndDetails.Add(modularAndDetail);
}
然后,我们启动项目在浏览器就把所以数据显现出来了。
数据虽然是出来了,但是,你们有没有发现上面的代码看起来就比较繁琐,这主要为了方面大家理解,而下面将步入我们的主要内容,简化代码。
由于视图里面没有设置page参数,也就没有分页,所以控制器这里可以把分页提取数据给删掉了。
下面将是重新写一个查询数据的代码,只不过比原来的要简化很多。
在这里直接统计数据,利用这个包含两个表数据的这个类 ModularAndDetail 将两个表的数据使用子查询查出来,给到ModularDetailVos里面。
//统计数据
int totalCount = myModel.SYS_Modular.Count();
//查询数据
List<ModularAndDetail> modularAndDetails = (from tbModular in myModel.SYS_Modular
select new ModularAndDetail {
ModularID = tbModular.ModularID,
ModularName = tbModular.ModularName,
ModularDetailVos = (from tbModularDetail in myModel.SYS_ModularDetail
join tbOpType in myModel.SYS_OpType
on tbModularDetail.OpTypeID equals tbOpType.OpTypeID
where tbModularDetail.ModularID == tbModular.ModularID
select new ModularDetail {
OpTypeID = tbModularDetail.OpTypeID,
OpType = tbOpType.OpType.Trim(),
ModularDetailID = tbModularDetail.ModularDetailID
}).ToList()
}).ToList();
LayuiTableData<ModularAndDetail> layuiTableData = new LayuiTableData<ModularAndDetail>();
layuiTableData.count = totalCount;
layuiTableData.data = modularAndDetails;
return Json(layuiTableData, JsonRequestBehavior.AllowGet);
}
这下子是不是就显得比较直观了。