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

     
     
  • 相关阅读:
    C# GridView点击某列打开新浏览器窗口
    大白话系列之C#委托与事件讲解(二)
    大白话系列之C#委托与事件讲解(一)
    Razor语法大全
    Expression<Func<T,TResult>>和Func<T,TResult>
    C#委托的介绍(delegate、Action、Func、predicate)
    Android--样式经验
    Android--onSaveInstanceState()保存数据
    Android--ActivityLiving生命周期
    android--快捷键
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3166002.html
Copyright © 2020-2023  润新知