先来看看几个LINQ to SQL的几个函数。

Take

说明:获取集合的前n个元素;延迟。即只返回限定数量的结果集。

var q = (

    from e in db.Employees

    orderby e.HireDate

    select e)

    .Take(5);

语句描述:选择所雇用的前5个雇员。

Skip 

说明:跳过集合的前n个元素;延迟。即我们跳过给定的数目返回后面的结果集。

var q = (

    from p in db.Products

    orderby p.UnitPrice descending

    select p)

    .Skip (10);

语句描述:选择10种最贵产品之外的所有产品。

OrderBy
    适用场景:对查询出的语句进行排序,比如按时间排序 等等。
    说明:按指定表达式对集合排序;延迟,:按指定表达式对集合 排序;延迟,默认是升序,加上descending表示降序,对应的扩展方法是 OrderBy和OrderByDescending

下面这个例子使用 orderby 按雇用日期对雇员进行排序:
    var q =
    from e in db.Employees
    orderby e.HireDate
    select e;
    说明:默认为升序

看完这两个函数的使用方法,那么分页的思路也就很容易推出来了,若要显示第m页,每页n条数据,我们应该跳过n*(m-1)条数据,显示n条数据。

源码如下:

  1. /// <summary>
  2. /// 分页查询 + 条件查询 + 排序
  3. /// </summary>
  4. /// <typeparam name="Tkey">泛型</typeparam>
  5. /// <param name="pageSize">每页大小</param>
  6. /// <param name="pageIndex">当前页码</param>
  7. /// <param name="total">总数量</param>
  8. /// <param name="whereLambda">查询条件</param>
  9. /// <param name="orderbyLambda">排序条件</param>
  10. /// <param name="isAsc">是否升序</param>
  11. /// <returns>IQueryable 泛型集合</returns>
  12. public IQueryable<T> LoadPageItems<Tkey>(int pageSize, int pageIndex, out int total, Expression<Func<T, bool>> whereLambda, Func<T, Tkey> orderbyLambda, bool isAsc)
  13. {
  14. total = MyBaseDbContext.Set<T>().Where(whereLambda).Count();
  15. if (isAsc)
  16. {
  17. var temp = MyBaseDbContext.Set<T>().Where(whereLambda)
  18. .OrderBy<T, Tkey>(orderbyLambda)
  19. .Skip(pageSize * (pageIndex - 1))
  20. .Take(pageSize);
  21. return temp.AsQueryable();
  22. }
  23. else
  24. {
  25. var temp = MyBaseDbContext.Set<T>().Where(whereLambda)
  26. .OrderByDescending<T, Tkey>(orderbyLambda)
  27. .Skip(pageSize * (pageIndex - 1))
  28. .Take(pageSize);
  29. return temp.AsQueryable();
  30. }
  31. }

使用示例

//查询要求:每页10条,显示第2页,查询性别为“男”,按年龄增序排列

int totalRecord;

List<Student>result = studentService.LoadItems(10,2,out totalRecord,u=>u.Sex==”男”,u=>u.Age,True);

EF分页的更多相关文章

  1. EF分页中的陷阱

    (一) 前言                                                                   EF使用非常简单,但是如果使用不当就会误入EF陷阱中. ...

  2. 存储过程分页 Ado.Net分页 EF分页 满足90%以上

    存储过程分页: create proc PR_PagerDataByTop @pageIndex int, @pageSize int, @count int out as select top(@p ...

  3. (整理)EF分页的实现

    最近做一个小功能,需要数据分页,因为小框架使用的是EF,因此查询了一下EF的分页. EF分页主要用到了skip和take两个方法: GetListBy(lamda xxxxx).skip(PageSi ...

  4. .NET Core使用EF分页查询数据报错:OFFSET语法错误问题

    在Asp.Net Core MVC项目中使用EF分页查询数据时遇到一个比较麻烦的问题,系统会报如下错误: 分页查询代码: ) * condition.PageSize).Take(condition. ...

  5. EF 分页查询优化

    按照通常的方式分页查询至少要查询数据两遍,一个操作是查询总数,另一个是查询数据,这样有些耗时 这里介绍一个基于EF的插件 EntityFramework.Extended,当然这个插件有很多的功能,比 ...

  6. EF分页问题探讨之 OrderBy

    EntityFramework 应用场景 最近被应用程序中页面加载慢的问题所折磨,看似容易的问题,其实并不容易(已经持续两天时间了),经过“侦查”,发现了两个“嫌疑犯”: EntityFramewor ...

  7. 利用JqGrid结合ashx及EF分页显示列表之二

    上一篇文章简单利用JqGrid及ashx进行一个数据列表的显示,要文的重点是利用EF的分页与JqGrid进行结合,EF本文只是简单运用所以没有很规范,重点还是JqGrid分页的实现;本实例把JqGri ...

  8. 关于EF分页查询报错(Count must have a non-negative value.)的解决方案

    具体的异常信息如下,一开始没有写日志只看到错误信息:Count must have a non-negative value.,从表面意思可以看出来是Count值出现了负数,所以报错,查了半天的原因也 ...

  9. EF分页查询

    /// <summary> /// 分页查询 + 条件查询 + 排序 /// </summary> /// <typeparam name="Tkey" ...

随机推荐

  1. Redis缓存项目应用架构设计一

    一些项目整理出的项目中引入缓存的架构设计方案,希望能帮助你更好地管理项目缓存,作者水平有限,如有不足还望指点. 一.基础结构介绍 项目中对外提供方法的是CacheProvider和MQProvider ...

  2. Sublime Text3使用指南

    前言(Prologue) Sublime Text是一款跨平台代码编辑器(Code Editor),从最初的Sublime Text 1.0,到现在的Sublime Text 3.0,Sublime ...

  3. FPGA多时钟处理应用

    FPGA项目设计中,通常会遇到多时钟处理.即一个PLL输出多个时钟,根据条件选择合适的时钟用作系统时钟.方案一: 外部晶振时钟进入PLL,由PLL输出多个时钟,MUX根据外部条件选择时钟输出做为系统使 ...

  4. kazoo python zookeeper 选主

    本文讲述基于zookeeper选主与故障切换的方法.我们的例子使用的是python. 使用的库是kazoo,安装方式 pip install kazoo  应用场景: 多个实例部署,但不是" ...

  5. 学习PID

    最近在想自己的文章有些是不是写的太难以理解了呢.........竟然好多人看了还是会直接问我很多问题....... 其实PID哈靠自己想像就能自己写出来自己的代码,也许是网上的讲的太过的高深什么积分微 ...

  6. Learning Scrapy 中文版翻译 第一章

    第一章:scrapy介绍 欢迎来到scrapy之旅.通过这本书,我们将帮助你从只会一点或者零基础的Scrapy初学者达到熟练使用这个强大的框架在互联网或者其他资源抓取海量的数据.在这一章节,我们将给你 ...

  7. mysql的并发处理机制_下篇

        MySQL的并发处理机制,有MVCC及锁机制来处理,上篇简要说明了 MVCC及隔离级别,这篇来说说mysql下的锁.     温馨提示:下文有几个表格长度较长,右下角的博文导航目录会挡道,浏览 ...

  8. CURL常用命令记录--用于简单测试接口

    curl命令是一个利用URL规则在命令行下工作的文件传输工具.它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具.作为一款强力工具,curl支持包括HTTP.HTTPS.f ...

  9. MyBatis 笔记总结

    1.MyBatis中的一些要点: 1.1 SqlMapConfig.xml:mybatis的全局配置文件,配置mybatis的运行环境等信息,包括mapper.xml文件 1.2 mapper.xml ...

  10. Bootstrap--下拉菜单.dropdown

    下拉菜单.dropdown .dropdown <下拉菜单触发器button+下拉菜单ul> .dropdown 包裹层 .dropdown-toggle  下拉菜单触发器 data-to ...