在最近做的人事档案重构项目中,由于需求要求不要用视图、存储过程等,而且这个项目数据库字段的数量实在是令人发指,就我负责的综合信息查询来说,一个页面要显示7张表的数据,字段加起来都百八十个了。
首先看一下数据库结构:
basicInfomation是基本信息表,主键是nowTechnicalRecords(技术档案)的外键。现在页面上要显示的是一部分基本信息表的信息,一部分是技术档案的信息。所以需要根据导航属性进行关联查询。
通过查ef的文档,知道有个方法是用来进行关联查询的:include()。以下是关联查询和真分页的实践:
/// <summary> /// 分页查询 /// </summary> /// <typeparam name="Tkey"></typeparam> /// <param name="pageSize">每页显示条数</param> /// <param name="pageIndex">第几页</param> /// <param name="total">总条数</param> /// <param name="whereLambda">查询条件的lambda表达式</param> /// <param name="orderbyLambda">排序的lambda表达式</param> /// <returns></returns> public List<T_NowTechnicalRecords> QueryBasicInfo<Tkey>(int pageSize, int pageIndex, out int total, Expression<Func<T_NowTechnicalRecords, bool>> whereLambda, Expression<Func<T_NowTechnicalRecords, Tkey>> orderbyLambda) { renshiEntities db =new renshiEntities(); //定义数据库上下文 total = db.Set<T_NowTechnicalRecords>().Where(whereLambda).Count();//总记录数 var temp = db.T_NowTechnicalRecords.Include("T_BasicInformation") //进行ef查询 .Where(whereLambda) .OrderBy(orderbyLambda) .Skip(pageSize * (pageIndex - 1)) .Take(pageSize); return temp.AsQueryable().ToList();//转换成list }这样,在temp中就可以查询到第pageIndex页共有pageSize条数据,数据中,BasicInformation作为NowTechnicalRecords的属性被查询出来。
返回到页面上:
首先要定义model:
@model IEnumerable<TalentServiceCenterFileManage.Model.T_NowTechnicalRecords>然后在td标签中绑定字段:
<tr> @*nowTechnicalRecords表字段*@ <th>nowoRiginalTitle</th> <th>createTime</th> <th>nowEonDate</th> @*basicInformation表字段*@ <th>num</th> <th>name</th> </tr> @foreach (var item in Model) { <tr> <td>@item.nowoRiginalTitle</td> <td>@item.createTime</td> <td>@item.nowEonDate</td> <td>item.T_BasicInformation.num</td> <td>item.T_BasicInformation.name</td> </tr> }这样就实现了ef导航属性真分页查询。