zoukankan      html  css  js  c++  java
  • Ling to entity实现分页

    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语句,会有更深的理解。

     
     
  • 相关阅读:
    InvalidIndexNameException[Invalid index name [2Shard], must be lowercase]
    Head插件——学习Elasticsearch的锋刃利器!
    Fiddler使用AutoResponder进行本地文件和线上文件的映射
    启动redis出现Creating Server TCP listening socket *:6379: bind: No such file or directory
    Project configuration is not up-to-date with pom.xml错误解决方法
    创建支持eclipse的多模块maven项目
    Eclipse添加默认的JRE
    错误:HttpServlet was not found on the Java
    Android插件化开发之Atlas初体验
    Android屏幕适配全攻略(最权威的官方适配指导)
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3166002.html
Copyright © 2011-2022 走看看