EF导航属性真分页查询

来源:互联网 发布:聚宝盆返奖统计软件 编辑:程序博客网 时间:2024/06/05 08:40

        在最近做的人事档案重构项目中,由于需求要求不要用视图、存储过程等,而且这个项目数据库字段的数量实在是令人发指,就我负责的综合信息查询来说,一个页面要显示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导航属性真分页查询。

0 0
原创粉丝点击