Linq 数据排序,分页
在用Linq查询中,常常需要用到分页功能,因为每次都需要些分页这些功能,于是把分页功能提取出来,不喜大家勿喷,只是贴出来,自觉地很实用。一下贴出核心代码:
/// <summary>
/// LinqHelper 主要用于数据集,排序 分页等功能
/// </summary>
public class LinqHelper
{
/// <summary>
/// 排序
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="source"></param>
/// <param name="sortExpression"></param>
/// <param name="sortDirection"></param>
/// <returns></returns>
public static IQueryable<T> DataSorting<T>(IQueryable<T> source, string sortExpression, string sortDirection)
{
string sortingDir = string.Empty;
if (sortDirection.ToUpper().Trim() == "ASC")
sortingDir = "OrderBy";
else if (sortDirection.ToUpper().Trim() == "DESC")
sortingDir = "OrderByDescending";
ParameterExpression param = Expression.Parameter(typeof(T), sortExpression);
PropertyInfo pi = typeof(T).GetProperty(sortExpression);
Type[] types = new Type[];
types[] = typeof(T);
types[] = pi.PropertyType;
Expression expr = Expression.Call(typeof(Queryable), sortingDir, types, source.Expression, Expression.Lambda(Expression.Property(param, sortExpression), param));
IQueryable<T> query = source.AsQueryable().Provider.CreateQuery<T>(expr);
return query;
}
/// <summary>
/// 分页
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="source"></param>
/// <param name="pageNumber"></param>
/// <param name="pageSize"></param>
/// <returns></returns>
public static IQueryable<T> DataPaging<T>(IQueryable<T> source, int pageNumber, int pageSize)
{
return source.Skip((pageNumber - ) * pageSize).Take(pageSize);
}
/// <summary>
/// 排序并分页
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="source"></param>
/// <param name="sortExpression"></param>
/// <param name="sortDirection"></param>
/// <param name="pageNumber"></param>
/// <param name="pageSize"></param>
/// <returns></returns>
public static IQueryable<T> SortingAndPaging<T>(IQueryable<T> source, string sortExpression, string sortDirection, int pageNumber, int pageSize)
{
if (!string.IsNullOrEmpty(sortDirection))
{
// IQueryable<T> query = DataSorting<T>(source, sortExpression, sortDirection);
}
IQueryable<T> query = source.AsQueryable();
return DataPaging(query, pageNumber, pageSize);
}
}
在分页中需要一个辅助的类用于分页排序的类,用于限定分页的参数:
//排序用到的参数
public class GridPager
{
/// <summary>
/// //每页行数
/// </summary>
public int rows { get; set; }
/// <summary>
/// //当前页是第几页
/// </summary>
public int page { get; set; }
/// <summary>
/// //排序方式
/// </summary>
public string order { get; set; }
/// <summary>
/// //排序列
/// </summary>
public string sort { get; set; }
/// <summary>
/// //总行数
/// </summary>
public int totalRows { get; set; }
}
使用方法*.ASP中 XXXX.ashx一般处理程序中,调用方法为:
public void GetAllInfoRW(HttpContext context)
{
string retStr = "";
string rowsStr = "";
int rCount = ;
GridPager pager = new GridPager
{
page = Convert.ToInt32(context.Request["page"]),
rows = Convert.ToInt32(context.Request["rows"]),
sort = "RTime",
order = "DESC"
};
string chk = context.Request["chk"].ToString();
List<ShowCCK_DHModle> list = CCRK_CKDBiz.GetAllShowInfo(chk,ref rCount);
var resout = LinqHelper.SortingAndPaging(list.AsQueryable(), pager.sort, pager.sort, pager.page, pager.rows);
rowsStr = JsonConvert.SerializeObject(list); retStr = "{\"total\":\"" + rCount + "\",\"rows\":" + rowsStr + "}"; context.Response.Write(retStr);
}
在easyui-datagrid中注意json格式
在使用JsonConvert.SerializeObject(object); 方法中需要引入命名空间,【using Newtonsoft.Json】可以通过可以通过Nuget程序管理工具在http://www.nuget.org/官网上下载


在VS中通过Nuget程序管理工具输入命令:Install-Package Newtonsoft.Json

Linq 数据排序,分页的更多相关文章
- .NET LINQ 数据排序
数据排序 排序操作按一个或多个特性对序列的元素进行排序. 第一个排序条件对元素执行主要排序. 通过指定第二个排序条件,可以对各个主要排序组中的元素进行排序. 方法 方法名 说明 C# 查 ...
- mongo数据排序和分页显示
数据排序 使用sort()1 升序-1 降序自然排序 数据插入的顺序$natural db.stu.drop(); db.stu.insert({,,"address":" ...
- bootstrapTable的数据后端分页排序
数据后端分页排序,其实就是sql语句中oeder by做一些限制. 之前在写sql语句中的order by是写死,既然要写活,就要传参数到后台. 之前讲到bootstrapTable的queryPar ...
- SqlServer分页存储过程(多表查询,多条件排序),Repeater控件呈现数据以及分页
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出 ...
- LinQ动态排序
LinQ动态排序 首先修复程序中的一个BUG这个BUG在GridPager类中,把sord修改为sort这个名称填写错误,会导致后台一直无法获取datagrid的排序字段 本来是没有这一讲的,为了使2 ...
- 通过angularjs的directive以及service来实现的列表页加载排序分页
前两篇:(列表页的动态条件搜索,我是如何做列表页的)分别介绍了我们是如何做后端业务系统数据展示类的列表页以及动态搜索的,那么还剩下最重要的一项:数据展示.数据展示一般包含三部分: 数据列头 数据行 分 ...
- jsp+oracle 排序分页+Pageutil类
1.rownum和排序 Oracle中的rownum的是在取数据的时候产生的序号,所以想对指定排序的数据去指定的rowmun行数据就必须注意了. SQL> select rownum ,id,n ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(17)-LinQ动态排序
原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(17)-LinQ动态排序 首先修复程序中的一个BUG这个BUG在GridPager类中,把sord修改为s ...
- 通过angularjs的directive以及service来实现的列表页加载排序分页(转)
前两篇:(列表页的动态条件搜索,我是如何做列表页的)分别介绍了我们是如何做后端业务系统数据展示类的列表页以及动态搜索的,那么还剩下最重要的一项:数据展示.数据展示一般包含三部分: 数据列头 数据行 分 ...
随机推荐
- 浅谈Visitor Pattern
第一步: 在介绍Visitor Pattern (访问者模式)之前,先简要介绍一下:双重分派. 在Visitor Pattern中双重分派是指:数据结构的每一个节点都可以接受一个访问者的调用(这句 ...
- 将GDB中的输出定向到文件
1 set args >output.log 三种方法,一种通过tee在启动时重定向: 1 gdb |tee -a file 第二种在run时加入: 1 run <input.txt &g ...
- wget下载整个网站的方法
转自: http://blog.itpub.net/29867/viewspace-716088/ (修改部分内容) wget --restrict-file-name=ascii -m -c -n ...
- LVM更换硬盘
#检测坏道 smartctl -a /dev/sdd #硬盘检测 e2fsck -f /dev/mapper/vg_root-lv_data #重新定义空间大小,将原来的大小上减去要移走的硬盘 res ...
- 通过hover修改其他元素
hover,我们都知道,是监听组件“悬停状态”的一个伪类. 我们一般通过hover来修改组件的背景什么的,很少涉及到太复杂的操作.也就是说我们一般只是对加了hover伪类的元素自身的样式进行改变,比如 ...
- 正则表达式之Regex.Replace()用法
正则表达式替换匹配到的字符串 string txt = "AAA12345678AAAA"; //匹配到的连续数字的前4位用*替换 string m =Regex.Replace( ...
- JDK7集合框架源码阅读(五) Hashtable
基于版本jdk1.7.0_80 java.util.Hashtable 代码如下 /* * Copyright (c) 1994, 2011, Oracle and/or its affiliates ...
- WORDPRESS改为https部署
1.确保你已经正确开启了httpd 2.4.6的https配置,并且配置了该网站的虚拟主机,如下所示: <VirtualHost *:443> DocumentRoot "/ap ...
- DP【p2051(bzoj 1801)】 [AHOI2009]中国象棋.
题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法.大家肯定很清楚,在中国象棋中炮的行走方式是 ...
- 数学【p1412】 经营与开发(秦九韶算法)
顾z 你没有发现两个字里的blog都不一样嘛 qwq 题目描述-->P1412 经营与开发 分析 虽然看到\(Rank_1\)已经有了解释. 但我认为我能BB的更好 我还是决定来写一篇题解. q ...