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

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

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

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

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

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

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

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

  1.当前是第几页 currentPage

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

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

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

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

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

最新文章

  1. 在SQL2008查找某数据库中的列是否存在某个值
  2. thrift 学习
  3. Send to Kindle :一键推送网页内容到多看
  4. Android API 中文 ListView
  5. hdu 5535 Cake 构造+记忆化搜索
  6. poj1141Brackets Sequence(dp+路径)
  7. 配置开源项目 SlidingMenu 的问题
  8. 获取Enum枚举值描述的几法方法
  9. 201521123002 《Java程序设计》第6周学习总结
  10. Opencv基础课必须掌握:滑动条做调色盘 -OpenCV步步精深
  11. php+xdebug远程调试(单人)
  12. [转帖]EXPDP dumpfile和parallel的关系
  13. Batch入门教程丨第二章:认识变量相关概念
  14. flask 连接数据库
  15. Aladdin and the Flying Carpet(唯一分解定理)
  16. HTML5常用API
  17. Redis 复制原理及分析
  18. HDOJ 4869 Turn the pokers
  19. JDBC流ASCII和二进制数据
  20. (GoRails) Form对象设计风格: 用自建的Model来对参数进行操作。

热门文章

  1. ADO.NET中的DataReader详解
  2. 介绍一点.NET反编译的知识
  3. group by和distinct语句的执行顺序
  4. (转)浅谈HTML5与css3画饼图!
  5. jQuery基础知识--选择器与效果
  6. 支付宝收款连接 非API
  7. 程序员定制的中州韵(rime)windows版(小狼毫)微软双拼输入法
  8. python自学笔记一
  9. 一幅图证明chrome的由来和目的
  10. DB2执行脚本