zoukankan      html  css  js  c++  java
  • Entity Framework 学习之--Ling to entity实现分页

    最近用MVC做的一个项目涉及到分页,中间用了entity framework来查数据库,不用直接写sql语句,方便了很多。

    一般分页的思路是获得两个变量的值:

      1.一共有多少条记录 totalCount;

      2.每页有多少个数据 pageSize;

    其中totalCount可以查数据库得到,而pageSize一般由程序提前设定好,写在配置文件中,或直接hardcode写死。

    有了这两个变量,我们就可以知道一共有多少页数据totalPage,有了这些值,就可以在页面中将分页的页数显示出来。

    下面来看对指定的某一页对应的数据库操作:

       要知道某一页要呈现的数据,需要有如下两个变量:

      1.当前是第几页 currentPage

      2.每页有多少个数据 pageSize (第一页和最后一页数据条数可能不足)

    其中currentPage可以由页面的url传进来,有了这些值,可以来写数据库查询语句了。

    用Entity Framework来写数据库查询很简单,需要用到skip和take这两个函数,如下:

     1 public List<Info> ListItem(Query query, int currentPage, int pageSize, out int totalPage)
     2         {
     3             IEnumerable<Info> items=base.Query.Where(t => t.ID == query.Ids.FirstOrDefault() && (!t.ServerStatus.HasValue||t.ServerStatus.Value != Deleted));
     4             int total = items.Count();
     5             double pageCount = Math.Ceiling((double)total /(double)pageSize);
     6             totalPage =(int)pageCount ;
     7             if (currentPage >= totalPage)
     8             {
     9                 currentPage = totalPage;
    10             }
    11             return items.OrderBy(t => t.ID).Skip((currentPage - 1) * pageSize).Take(pageSize).ToList();
    12         }

    skip()函数会跳过指定的记录数,Take()函数会将余下的数据的前n条记录拿出来,这样就得到了指定页currentPage的数据。不必担心第一页和最后一页不足pageSize程序会出错,

    take函数已经屏蔽了这种错误,比如take(100),这时如果没有100条记录程序也不会异常,有多少条数据就会得到多少条数据。

    最后只需要写一个分页的partial生成对应页面的url在需要分页的view里面调用就好,很是方便。

    页面的效果:

    这面我没有花太多心思在分页工具的美观上,感兴趣的可以将其做得漂亮一些。

    总结:entity framework作为微软大力推的一个利器,确实有其很方便的地方,将程序员从手写sql中解放出来,同时期代码的简洁性,也会渐渐取代ling to sql,但由于它最终还是会

    生成对应的sql语句去查询数据库,虽然节省了写查询语句的事件,但其生成的sql语句肯定不会比直接手写sql来得简洁,尤其是多表连接,写很复杂的查询语句时,其生成sql语句的时间

    和查询性能不是很好的,这在大数据集下有时是致命伤。

    有兴趣的朋友可以用sql profile来看看entity生成的sql语句,会有更深的理解。

  • 相关阅读:
    poj 2488 DFS
    畅通工程 并查集模版
    KMP 模板
    poj 1426 DFS
    poj 2528 线段数
    poj 3468 线段数 修改区间(点)
    CVPR2012文章阅读(2)A Unified Approach to Salient Object Detection via Low Rank Matrix Recovery
    如何制定目标
    Saliency Map 最新综述
    计算机视觉模式识别重要会议杂志
  • 原文地址:https://www.cnblogs.com/hello--the-world/p/entityframework.html
Copyright © 2011-2022 走看看