EntityFramework进阶(五)- 分页
本系列原创博客代码已在EntityFramework6.0.0测试通过,转载请标明出处
我们创建分页信息类CommonPagedList,包含了字段总条数,总页数,当前页码,页大小,当前页数据。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; /*
* CopyRight ©2017 All Rights Reserved
* 作者:Rex Sheng
*/
namespace SuperNet.EntityFramework.PagedList
{
/// <summary>
/// 共通分页类
/// </summary>
/// <typeparam name="T"></typeparam>
public class CommonPagedList<T> : List<T>
where T : class
{
public int TotalItemCount { get; set; } public int PageSize { get; set; } public int PageIndex { get; set; } public int TotalPageCount { get; set; } private CommonPagedList() { } public CommonPagedList(CommonPagedList<T> list)
{
this.PageIndex = list.PageIndex;
this.PageSize = list.PageSize;
this.TotalItemCount = list.TotalItemCount;
this.TotalPageCount = list.TotalPageCount;
AddRange(list);
} public CommonPagedList(IQueryable<T> list, int pageIndex, int pageSize)
{
if (pageIndex <= )
pageIndex = ;
this.TotalItemCount = list.Count();
this.PageSize = pageSize;
this.TotalPageCount = this.TotalItemCount % this.PageSize == ? this.TotalItemCount / this.PageSize : this.TotalItemCount / this.PageSize + ;
pageIndex = pageIndex > this.TotalPageCount ? this.TotalPageCount : pageIndex;
this.PageIndex = pageIndex;
if (this.PageIndex > this.TotalPageCount)
this.PageIndex = this.TotalPageCount;
if (pageIndex <= )
{
pageIndex = ;
}
if (this.PageIndex <= )
{
this.PageIndex = ;
} var query = list.Skip((pageIndex - ) * pageSize).Take(pageSize);
AddRange(query);
} public CommonPagedList(IEnumerable<T> list, int pageIndex, int pageSize, int totalItemCount)
{
if (pageIndex <= )
pageIndex = ;
this.TotalItemCount = totalItemCount;
this.TotalPageCount = totalItemCount % pageSize == ? totalItemCount / pageSize : totalItemCount / pageSize + ;
pageIndex = pageIndex > this.TotalPageCount ? this.TotalPageCount : pageIndex;
if (pageIndex <= )
pageIndex = ;
this.PageIndex = pageIndex;
this.PageSize = pageSize;
AddRange(list);
}
}
}
调用的时候,我们创建扩展方法来实现
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks; /*
* CopyRight ©2017 All Rights Reserved
* 作者:Rex Sheng
*/
namespace SuperNet.EntityFramework.PagedList
{
public static class PagedListExtension
{
/// <summary>
/// 共通分页类扩展
/// </summary>
/// <typeparam name="T">查询返回类</typeparam>
/// <param name="allItems">要查询的数据</param>
/// <param name="pageIndex">要查询的页码</param>
/// <param name="pageSize">每页大小</param>
/// <returns></returns>
public static CommonPagedList<T> ToCommonPagedList<T>(this IOrderedQueryable<T> allItems, int pageIndex, int pageSize) where T : class
{
CommonPagedList<T> Result = new CommonPagedList<T>(allItems, pageIndex, pageSize);
return Result;
} /// <summary>
/// 单个字段排序分页查询
/// </summary>
/// <typeparam name="T">查询返回类</typeparam>
/// <typeparam name="TKey">排序字段类型</typeparam>
/// <param name="allItems">要查询的数据</param>
/// <param name="orderator">排序字段表达式</param>
/// <param name="asc">是否升序</param>
/// <param name="pageIndex">要查询的页码</param>
/// <param name="pageSize">每页大小</param>
/// <returns></returns>
public static CommonPagedList<T> ToCommonPagedList<T, TKey>(this IQueryable<T> allItems, Expression<Func<T, TKey>> orderator, bool asc, int pageIndex, int pageSize) where T : class
{
var source = asc ? allItems.OrderBy(orderator) : allItems.OrderByDescending(orderator);
CommonPagedList<T> Result = new CommonPagedList<T>(source, pageIndex, pageSize);
return Result;
} /// <summary>
/// 多个字段排序分页查询
/// </summary>
/// <typeparam name="T">查询返回类</typeparam>
/// <typeparam name="TKey1">排序字段类型1</typeparam>
/// <typeparam name="TKey2">排序字段类型2</typeparam>
/// <param name="allItems">要查询的数据</param>
/// <param name="orderator1">排序字段表达式1</param>
/// <param name="orderator2">排序字段表达式2</param>
/// <param name="asc1">是否升序1</param>
/// <param name="asc2">是否升序2</param>
/// <param name="pageIndex">要查询的页码</param>
/// <param name="pageSize">每页大小</param>
/// <returns></returns>
public static CommonPagedList<T> ToCommonPagedList<T, TKey1, TKey2>(this IQueryable<T> allItems, Expression<Func<T, TKey1>> orderator1, Expression<Func<T, TKey2>> orderator2, bool asc1, bool asc2, int pageIndex, int pageSize) where T : class
{
var source = asc1 ? (asc2 ? allItems.OrderBy(orderator1).ThenBy(orderator2) : allItems.OrderBy(orderator1).ThenByDescending(orderator2))
: (asc2 ? allItems.OrderByDescending(orderator1).ThenBy(orderator2) : allItems.OrderByDescending(orderator1).ThenByDescending(orderator2));
CommonPagedList<T> Result = new CommonPagedList<T>(source, pageIndex, pageSize);
return Result;
} /// <summary>
/// 共通分页类
/// </summary>
/// <typeparam name="T">查询返回类</typeparam>
/// <param name="allItems">要查询的数据</param>
/// <param name="pageIndex">要查询的页码</param>
/// <param name="pageSize">每页大小</param>
/// <returns></returns>
public static CommonPagedList<T> ToCommonPagedList<T>(this IOrderedEnumerable<T> allItems, int pageIndex, int pageSize) where T : class
{
CommonPagedList<T> Result = new CommonPagedList<T>(allItems.AsQueryable(), pageIndex, pageSize);
return Result;
}
}
}
EntityFramework进阶(五)- 分页的更多相关文章
- J2EE进阶(五)Spring在web.xml中的配置
J2EE进阶(五)Spring在web.xml中的配置 前言 在实际项目中spring的配置文件applicationcontext.xml是通过spring提供的加载机制自动加载到容器中.在web ...
- Web Service进阶(五)SOAPBinding方式讲解
Web Service进阶(五)SOAPBinding方式讲解 Java API for XML Web Services (JAX-WS) 2.0 (JSR 224) Standard Implem ...
- Java进阶(五十三)屡试不爽之正则表达式
Java进阶(五十三)屡试不爽之正则表达式 在线测试网址: http://tool.oschina.net/regex/# 上面的在线测试网址,含有正则表达式的生成,非常实用.大家共勉之! 匹配中文: ...
- Java进阶(五十一)Could not create the view: An unexpected exception was thrown
Java进阶(五十一)Could not create the view: An unexpected exception was thrown 今天打开Myeclipse10的时候,发现server ...
- Java进阶(五十一)必须记住的Myeclipse快捷键
Java进阶(五十一)必须记住的Myeclipse快捷键 在调试程序的时候,我们经常需要注释一些代码,在用Myeclipse编程时,就可以用 Ctrl+/ 为选中的一段代码加上以 // 打头的注释:当 ...
- Java进阶(五十二)利用LOG4J生成服务日志
Java进阶(五十二)利用LOG4J生成服务日志 前言 由于论文写作需求,需要进行流程挖掘.前提是需要有真实的事件日志数据.真实的事件日志数据可以用来发现.监控和提升业务流程. 为了获得真实的事件日志 ...
- Python爬虫进阶五之多线程的用法
前言 我们之前写的爬虫都是单个线程的?这怎么够?一旦一个地方卡到不动了,那不就永远等待下去了?为此我们可以使用多线程或者多进程来处理. 首先声明一点! 多线程和多进程是不一样的!一个是 thread ...
- Python进阶(五)----内置函数Ⅱ 和 闭包
Python进阶(五)----内置函数Ⅱ 和 闭包 一丶内置函数Ⅱ ####内置函数#### 特别重要,反复练习 ###print() 打印输入 #sep 设定分隔符 # end 默认是换行可以打印到 ...
- EntityFramework进阶(二)- DbContext预热
本系列原创博客代码已在EntityFramework6.0.0测试通过,转载请标明出处 在DbContext首次调用的时候,会很慢,甚至会有5,6秒的等待,通常称为冷查询.再次调用的时候,几毫秒就能请 ...
- MySQL进阶8 分页查询(limit) - 【SQL查询语法执行顺序及大致结构】- 子查询的3个经典案例
#进阶8 分页查询 /* 应用场景: 当要显示的数据,一页显示不全,需要分页提交sql请求 语法: select 查询列表 #7 from 表1 #执行顺序:#1 [join type join 表2 ...
随机推荐
- Python设计模式之MVC模式
# -*- coding: utf-8 -*- # author:baoshan quotes = ('A man is not complete until he is married. Then ...
- openresty开发系列27--openresty中封装redis操作
openresty开发系列27--openresty中封装redis操作 在关于web+lua+openresty开发中,项目中会大量操作redis, 重复创建连接-->数据操作-->关闭 ...
- 一、搭建简单的axis web服务
转: 一.搭建简单的axis web服务 1.在官方网站下载axis的工程(这个等下就有用的)和源码.jar包等,下载地址是: http://labs.renren.com/apache-mirror ...
- Spring cloud微服务安全实战-3-12session固定攻击防护
getSession这个方法里面的逻辑,会根据传过来的cookie里面带的JSessionID在你的服务器上去找一个session,如果能找到,就用这个已经存在的session,这个getSessio ...
- redis添加到linux系统服务
http://blog.csdn.net/justfor3l/article/details/53187795
- Node.js 服务端图片处理利器
sharp 是 Node.js 平台上相当热门的一个图像处理库,其实际上是基于 C 语言编写 的 libvips 库封装而来,因此高性能也成了 sharp 的一大卖点.sharp 可以方便地实现常见的 ...
- Find minimum number of people to reach to spread a message across all people in twitter
Considering that I'ld would like to spread a promotion message across all people in twitter. Assumin ...
- Python3之内建模块collections
collections是python内建的一个集合模块,提供了许多有用的集合类. namedtuple 我们知道tuple可以表示不可变集合,例如,一个点的二维坐标可以表示成 >>> ...
- 【ARTS】01_46_左耳听风-201900923~201900929
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- 解决RedisDesktopManager连接不上redis问题
linux 下安装redis很简单,在此不做赘述 发现linux上启动redis,测试redis使用正常, 但使用RedisDesktopManager却连接不上,报错如下,报错信息显示:当前使用的P ...