EF分页

摘要:
让我们来看看一些LINQ to SQL函数。也就是说,只返回有限数量的结果集。varq=.Take;声明描述:选择前5名员工。也就是说,我们跳过给定的数字并返回后续的结果集。varq=跳过;声明描述:选择除10种最贵产品外的所有产品。OrderBy应用程序场景:对查询语句进行排序,例如按时间排序。

先来看看几个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条数据。

源码如下:

[csharp] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  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分页》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Sqlserver 利用时间戳 + 自增长ID 生成流水号 模拟并发请求生成重复ID 解决方法jQuery打印Html页面自动分页下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

基于ServiceStack.OrmLite框架 代码性能、开发效率皆第一 没有之一

基于ServiceStack.OrmLite框架 代码性能、开发效率皆第一 没有之一 1.此框架方便简洁,便于学习研究。除了基本的增删改查外,还有分页,兼容分页的多表查询,同一业务处理时多次数据库操作仅需要打开一次数据库,反射对象映射赋值,分页返回集合的json封装函数,自定义对象,NLOG日志记录,前端H+框架,sweetalert、Sortable、l...

web列表分页与问题

之前做过很多分页,只是拿别人的模板照抄下来。今天做一个分页的时候自己认真分析了一下,里面问题还挺多的。 业务场景:系统做一个web容器的发布系统,需要有个发布历史的页面。 问题: 1、分页机制的原因 2、一般的实现方式 3、自己考虑的实现方式为什么不行 回答: 1、原因:数据量太多,全部列出来不方便查看,对客户端和服务端的压力也比较大。 比如发布系统用了3...

AspNetPager实现真分页+多种样式

真假分页 分页是Web应用程序中最常用到的功能之一。当从数据库中获取的记录远远超过界面承载能力的时候,使用分页可以使我们的界面更加美观,更加的用户友好。分页包括两种类型:真分页和假分页。 其中假分页就是从数据库中获取全部的想要检索的记录数,然后再显示给用户;而真分页则是根据页面的情况,检索特定页面要求内的记录。当然如果数据库中记录较少的话,真假分页的效果是...

WinForm界面开发之“分页控件”

在程序中,分页总是永远的话题,因为数据总是很多很多,分页展示在程序性能和数据查看感官方面得到很好的平衡,是一种良好的编程习惯和UI设计。 Winform中的分页控件可能没有Asp.net世界中的分页控件那么丰富多彩,不过也有不少的分页控件可以采用,各个人的可能都有一些不同的东西,一些好的东西。就我而言,我希望控件能够尽可能的多一些功能,耦合性低一些,例如我...

js打印窗口内容并当窗口内容较长时自动分页

项目环境Angular: 方法1、window.print() HTML页面上的代码: <div id="tenementBillTable" class="dialog-content"> <div *ngFor="let item of dataList" class="table-container">...

MySQL分页时使用 limit+order by 会出现数据重复问题

1、问题描述 在MySQL中我们通常会采用limit来进行翻页查询,比如limit(0,10)表示列出第一页的10条数据,limit(10,10)表示列出第二页。但是,当limit遇到order by的时候,可能会出现翻到第二页的时候,竟然又出现了第一页的记录。 SELECT `post_title`, `post_date` FROM pos...