Linq 数据排序,分页
2016-01-19 10:34
281 查看
在用Linq查询中,常常需要用到分页功能,因为每次都需要些分页这些功能,于是把分页功能提取出来,不喜大家勿喷,只是贴出来,自觉地很实用。一下贴出核心代码:
在分页中需要一个辅助的类用于分页排序的类,用于限定分页的参数:
使用方法*.ASP中 XXXX.ashx一般处理程序中,调用方法为:
在easyui-datagrid中注意json格式
在使用JsonConvert.SerializeObject(object); 方法中需要引入命名空间,【using Newtonsoft.Json】可以通过可以通过Nuget程序管理工具在http://www.nuget.org/官网上下载
在VS中通过Nuget程序管理工具输入命令:Install-Package Newtonsoft.Json
/// <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[2]; types[0] = typeof(T); types[1] = 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 - 1) * 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 = 0; 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
相关文章推荐
- MySQL简单的确定瓶颈
- AJAX学习笔记(二)——同步和异步
- Android百度地图实现搜索和定位及自定义图标绘制并点击时弹出泡泡
- Ehcache memcache redis 三大缓存
- 经亲自实验,一台Windows电脑,同时接入2个USB鼠标和2个USB键盘,均可正常使用。
- 开发者必备的6款源码搜索引擎
- C 连接mysql VC的步骤
- Mac可设置环境变量的位置、查看和添加PATH环境变量
- 【opencv】VS2010+CMake重编译opencv2.4.10
- 单链表的基本操作
- Caffe学习系列(23):如何将别人训练好的model用到自己的数据上
- The Elements of Statistical Learning的笔记
- 数据库表 copy
- IOS导航栏颜色渐变与常用属性(最近应用比较流行的风格)
- C++预处理器
- CentOS学习13_rpm常用命令及rpm参数介绍
- Android开发笔记(五十二)通知推送Notification
- php利用phpexcel插件实现数据的导入和导出(支持csv\xls\xlsx格式和超过26个字段列)
- Django1.9 models数据库同步问题
- UIScrollView 代理方法