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语句,会有更深的理解。
Ling to entity实现分页的更多相关文章
- Entity Framework 学习之--Ling to entity实现分页
最近用MVC做的一个项目涉及到分页,中间用了entity framework来查数据库,不用直接写sql语句,方便了很多. 一般分页的思路是获得两个变量的值: 1.一共有多少条记录 totalCoun ...
- Entity Framework分页扩展
Entity Framework分页在我初入门时总是困扰这我,无论是SQL分页还是Entity Framework的分页,总是显得那么麻烦,因此对于Entity Framework单独封装了分页. 一 ...
- Entity Framework 分页处理
在SQL中进行分页,网上已经有很多例子了,在这里我使用Linq to SQL让C#来生成分页代码,首先创建分页的扩展方法: public static class Extensions { /// & ...
- Entity Framework学习笔记(六)----使用Lambda查询Entity Framework(1)
请注明转载地址:http://www.cnblogs.com/arhat 在前几章中,老魏一直使用Linq来查询Entity Framework.但是老魏感觉,如果使用Linq的话,那么Linq的返回 ...
- 数据你把它的金额-JAVA分页
数据量你造吗-JAVA分页 原创地址: http://www.cnblogs.com/Alandre/ (泥沙砖瓦浆木匠),须要转载的,保留下! Thanks 学习的心态第一,解行要对应. 事实 ...
- 数据量你造吗-JAVA分页
原创地址: http://www.cnblogs.com/Alandre/ (泥沙砖瓦浆木匠),需要转载的,保留下! Thanks 学习的心态第一,解行要相应.其实<弟子规>在“余力 ...
- Bootstrap表格分页(一)
最近在学习Bootstrap的分页,有一种方法用“Bootstrap-Paginator”的东西来做. 先预览一下: 为了能够局部刷新页面,我创建了一个PartialView 页面的HTML部分如下: ...
- Java_Web三大框架之Hibernate+jsp+HQL分页查询
分页查询无处不在.使用Hibernate+jsp+HQL进行分页查询. 第一步:编写房屋实体类和House.hbm.xml映射. /* * 房屋实体类 */ public class House { ...
- hibernate sql查询后对象转换成实体类
在多表查询的时候使用hibernate的sql查询的时候,一般返回的是object[]数组,或者可以使用 session.createSQLQuery(sql).setResultTransform ...
随机推荐
- 探讨css中repaint和reflow
(个人blog迁移文章.) 前言: 页面设计中,不可避免的需要浏览器进行repaint和reflow.那到底什么是repaint和reflow呢.下面谈谈自己对repaint和reflow的理解,以及 ...
- Node.js连接MySQL数据库及构造JSON的正确姿势
做一下整理,以前也很随意的引入包链接数据库,后来发现常常连接出问题,异常退出,后来使用在网上一个方法解决问题,网址由于书签丢失,抱歉不能引用了.再有就是简单的模块化下,使得目录合理点,再有就是说明一下 ...
- MySQL之 ALTER vs CHANGE vs MODIFY COLUMN
1.ALTER COLUMN 用于设置或者移除某一列的默认(缺省)值, 1.1用法 ALTER TABLE MyTable ALTER COLUMN foo SET DEFAULT 'bar'; AL ...
- CSS3教程:box-sizing属性的理解border、padding与容器宽度的关系
说到 IE 的 bug,一个臭名昭著的例子是它对于“盒模型”的错误解释:在 IE5.x 以及 Quirks 模式的 IE6/7 中,将 border 与 padding 都包含在 width 之内.这 ...
- Reporting Service部署之访问权限
原文:Reporting Service部署之访问权限 SQL Server Reporting Services 并非专门设计用于 Internet 报表部署方案,但是您可以成功地将 Reporti ...
- Mysql高级之事务
原文:Mysql高级之事务 通俗的说事务: 指一组操作,要么都成功执行,要么都不执行.---->原子性 在所有的操作没有执行完毕之前,其他会话不能够看到中间改变的过程-->隔离性 事务发生 ...
- centOS6 php 编 imap 模
php 编 c-client imap 客户.下载 http://www.washington.edu/imap/mirrors.html 第一步,编 c-client 官方文档说究竟有点坑,编译报错 ...
- 【转】Android学习之AndroidManifest.xml清单之<uses-feature>
无意之中看了几个小时的官方英文文档,关于<uses-feature>的介绍.有必要在这里记录一下,应该有很多人不知道<uses-feature>到底是做什么用的,因为我们平时根 ...
- Smarty属性
Attributes [属性] 大多数函数都带有自己的属性以便于明确说明或者修改他们的行为. smarty函数的属性很像HTML中的属性. 静态数值不需要加引号,但是字符串建议使用引号. 如果用 ...
- html5 canvas+js实现ps钢笔抠图
html5 canvas+js实现ps钢笔抠图 1. 项目要求需要用js实现photoshop中钢笔抠图功能,就用了近三四天的时间去解决它,最终还是基本上把他实现了. 做的过程中走了不少弯路,最终一同 ...