博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Entity Framework 学习之--Ling to entity实现分页
阅读量:6258 次
发布时间:2019-06-22

本文共 1726 字,大约阅读时间需要 5 分钟。

最近用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
ListItem(Query query, int currentPage, int pageSize, out int totalPage) 2 { 3 IEnumerable
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语句,会有更深的理解。

转载于:https://www.cnblogs.com/hello--the-world/p/entityframework.html

你可能感兴趣的文章
DataGridView 行的用户删除操作的自定义
查看>>
linux cpu内存利用率获取
查看>>
产品设计体会(8009)产品经理值得看的16个博客
查看>>
Hyper-V 2016 系列教程13 虚拟机监控程序规范
查看>>
SetupDiGetDeviceInterfaceDetail 函数
查看>>
让百度、Google搜到你的博客和论坛
查看>>
C++串口编程实例
查看>>
SSRS 2012 报表基本结构与设置
查看>>
Exchange 2013部署系列之(七)配置SSL多域名证书
查看>>
WPF:从WPF Diagram Designer Part 1学习控件模板、移动、改变大小和旋转
查看>>
创建与SharePoint 2010风格一致的下拉菜单
查看>>
Linux下创建与解压zip, tar, tar.gz和tar.bz2文件
查看>>
IT基础结构-4.BDNS-安装与配置
查看>>
轮番上阵:Linux下查找漏洞的N种兵器(转贴)
查看>>
综合应用WPF/WCF/WF/LINQ之六:数据库结构
查看>>
调用Android中的软键盘
查看>>
Nutz:Ioc
查看>>
无线时代来临,谁来管理我的无线AP?
查看>>
Android帧缓冲区(Frame Buffer)硬件抽象层(HAL)模块Gralloc的实现原理分析(5)...
查看>>
《从零开始学Swift》学习笔记(Day 49)——扩展声明
查看>>