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

Entity Framework 学习之--Ling to entity实现分页的更多相关文章

  1. Entity Framework 学习

    Entity Framework 学习初级篇1--EF基本概况 Entity Framework 学习初级篇2--ObjectContext.ObjectQuery.ObjectStateEntry. ...

  2. Entity Framework 学习整理(分播客整理)

    MSDN: http://msdn.microsoft.com/en-us/data/aa937723 台湾博客: http://www.dotblogs.com.tw/yc421206/ http: ...

  3. Entity Framework 学习笔记(2)

    上期回顾:Entity Framework 学习笔记(1) Entity Framework最主要的东西,就是自己创建的.继承于DbContext的类: /// <summary> /// ...

  4. Entity Framework学习笔记

    原文地址:http://www.cnblogs.com/frankofgdc/p/3600090.html Entity Framework学习笔记——错误汇总   之前的小项目做完了,到了总结经验和 ...

  5. Entity Framework 学习中级篇1—EF支持复杂类型的实现

    本节,将介绍如何手动构造复杂类型(ComplexType)以及复杂类型的简单操作. 通常,复杂类型是指那些由几个简单的类型组合而成的类型.比如:一张Customer表,其中有FristName和Las ...

  6. MVC5 Entity Framework学习

    MVC5 Entity Framework学习(1):创建Entity Framework数据模型 MVC5 Entity Framework学习(2):实现基本的CRUD功能 MVC5 Entity ...

  7. Entity Framework学习初级篇2

    Entity Framework 学习初级篇2--ObjectContext.ObjectQuery.ObjectStateEntry.ObjectStateManager类的介绍 本节,简单的介绍E ...

  8. ADO.NET Entity Framework学习笔记(3)ObjectContext

    ADO.NET Entity Framework学习笔记(3)ObjectContext对象[转]   说明 ObjectContext提供了管理数据的功能 Context操作数据 AddObject ...

  9. MVC5 Entity Framework学习之实现主要的CRUD功能

    在上一篇文章中,我们使用Entity Framework 和SQL Server LocalDB创建了一个MVC应用程序,并使用它来存储和显示数据.在这篇文章中,你将对由 MVC框架自己主动创建的CR ...

随机推荐

  1. 三国塔防游戏android源码

    三国塔防游戏源码,这个游戏源码比较完整的,因为上传有20M限制,把代码工程包分开了,主文件是TFGame,其他res大家按照安卓包加进去就行,欢迎下载并交流 ,大家可以参考一下吧.<ignore ...

  2. JQuery 的几个有用的技巧

    JQuery代码 /* 新窗口打开链接:JQuery filter attr * 禁止鼠标弹出右键菜单:DOM contextmenu * 回到页面顶端:DOM scrollTo * 动态更换Css样 ...

  3. 设置peoplecode trace

    Configuring PeopleCode Trace Select PeopleTools, Utilities, Debug, Trace PeopleCode to access the Tr ...

  4. Git一张图学习

  5. Sql Server 常用的查询

    基本常用查询 --select select * from student; --all 查询所有 select all sex from student; --distinct 过滤重复 selec ...

  6. 在c#中使用mongo-csharp-driver操作mongodb

    1)下载安装 下载地址:http://github.com/mongodb/mongo-csharp-driver/downloads 编译之后得到两个dll MongoDB.Driver.dll:顾 ...

  7. (转)Arcgis API常用接口调用方法

    var map, navToolbar, editToolbar, tileLayer, toolbar;//var mapBaseUrl = "http://localhost:8399/ ...

  8. 【转】DCC32的参数详解

    完整的内容如下: // DCC32编译器的设置说明. // Dcc32 [options] filename [options] // DCC32 [操作选项] 文件名称 [操作选项] // -A&l ...

  9. 使用WIF实现单点登录Part I——Windows Identity Foundation介绍及环境搭建

    首先先说一下什么是WIF(Windows Identity Foundation).由于各种历史原因,身份验证和标识的管理一般都比较无规律可循.在软件里加入“身份验证”功能意味着要在你的代码里混进处理 ...

  10. LinqToSql中使用事务(2)

    原文地址:http://www.cnblogs.com/blusehuang/archive/2007/07/16/819677.html