zoukankan      html  css  js  c++  java
  • Linq 数据排序,分页

      在用Linq查询中,常常需要用到分页功能,因为每次都需要些分页这些功能,于是把分页功能提取出来,不喜大家勿喷,只是贴出来,自觉地很实用。一下贴出核心代码:

     1  /// <summary>
     2     /// LinqHelper 主要用于数据集,排序 分页等功能
     3     /// </summary>
     4     public class LinqHelper
     5     {
     6         /// <summary>
     7         /// 排序
     8         /// </summary>
     9         /// <typeparam name="T"></typeparam>
    10         /// <param name="source"></param>
    11         /// <param name="sortExpression"></param>
    12         /// <param name="sortDirection"></param>
    13         /// <returns></returns>
    14         public static IQueryable<T> DataSorting<T>(IQueryable<T> source, string sortExpression, string sortDirection)
    15         {
    16             string sortingDir = string.Empty;
    17             if (sortDirection.ToUpper().Trim() == "ASC")
    18                 sortingDir = "OrderBy";
    19             else if (sortDirection.ToUpper().Trim() == "DESC")
    20                 sortingDir = "OrderByDescending";
    21             ParameterExpression param = Expression.Parameter(typeof(T), sortExpression);
    22             PropertyInfo pi = typeof(T).GetProperty(sortExpression);
    23             Type[] types = new Type[2];
    24             types[0] = typeof(T);
    25             types[1] = pi.PropertyType;
    26             Expression expr = Expression.Call(typeof(Queryable), sortingDir, types, source.Expression, Expression.Lambda(Expression.Property(param, sortExpression), param));
    27             IQueryable<T> query = source.AsQueryable().Provider.CreateQuery<T>(expr);
    28             return query;
    29         }
    30         /// <summary>
    31         /// 分页
    32         /// </summary>
    33         /// <typeparam name="T"></typeparam>
    34         /// <param name="source"></param>
    35         /// <param name="pageNumber"></param>
    36         /// <param name="pageSize"></param>
    37         /// <returns></returns>
    38         public static IQueryable<T> DataPaging<T>(IQueryable<T> source, int pageNumber, int pageSize)
    39         {
    40             return source.Skip((pageNumber - 1) * pageSize).Take(pageSize);
    41         }
    42         /// <summary>
    43         /// 排序并分页 
    44         /// </summary>
    45         /// <typeparam name="T"></typeparam>
    46         /// <param name="source"></param>
    47         /// <param name="sortExpression"></param>
    48         /// <param name="sortDirection"></param>
    49         /// <param name="pageNumber"></param>
    50         /// <param name="pageSize"></param>
    51         /// <returns></returns>
    52         public static IQueryable<T> SortingAndPaging<T>(IQueryable<T> source, string sortExpression, string sortDirection, int pageNumber, int pageSize)
    53         {
    54             if (!string.IsNullOrEmpty(sortDirection))
    55             {
    56                 //  IQueryable<T> query = DataSorting<T>(source, sortExpression, sortDirection);
    57             }
    58             IQueryable<T> query = source.AsQueryable();
    59             return DataPaging(query, pageNumber, pageSize);
    60         }
    61     }

    在分页中需要一个辅助的类用于分页排序的类,用于限定分页的参数:

     1 //排序用到的参数
     2     public class GridPager
     3     {
     4         /// <summary>
     5         /// //每页行数
     6         /// </summary>
     7         public int rows { get; set; }
     8         /// <summary>
     9         /// //当前页是第几页
    10         /// </summary>
    11         public int page { get; set; }
    12         /// <summary>
    13         /// //排序方式
    14         /// </summary>
    15         public string order { get; set; }
    16         /// <summary>
    17         /// //排序列
    18         /// </summary>
    19         public string sort { get; set; }
    20         /// <summary>
    21         /// //总行数 
    22         /// </summary>
    23         public int totalRows { get; set; }     
    24     }

     使用方法*.ASP中 XXXX.ashx一般处理程序中,调用方法为:

     1  public void GetAllInfoRW(HttpContext context)
     2     {
     3         string retStr = "";
     4         string rowsStr = "";
     5         int rCount = 0;
     6        GridPager pager = new GridPager
     7         {
     8             page = Convert.ToInt32(context.Request["page"]),
     9             rows = Convert.ToInt32(context.Request["rows"]),
    10             sort = "RTime",
    11             order = "DESC"
    12         };
    13         string chk = context.Request["chk"].ToString();
    14         List<ShowCCK_DHModle> list = CCRK_CKDBiz.GetAllShowInfo(chk,ref rCount);
    15         var resout = LinqHelper.SortingAndPaging(list.AsQueryable(), pager.sort, pager.sort, pager.page, pager.rows);
    16         rowsStr = JsonConvert.SerializeObject(list);
    17 
    18         retStr = "{"total":"" + rCount + "","rows":" + rowsStr + "}";
    19 
    20         context.Response.Write(retStr);
    21     }

    在easyui-datagrid中注意json格式

    在使用JsonConvert.SerializeObject(object); 方法中需要引入命名空间,【using  Newtonsoft.Json】可以通过可以通过Nuget程序管理工具在http://www.nuget.org/官网上下载

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

  • 相关阅读:
    随机森林算法参数调优
    BAYES和朴素BAYES
    阿里云 金融接口 token PHP
    PHP mysql 按时间分组 表格table 跨度 rowspan
    MySql按周,按月,按日分组统计数据
    PHP 获取今日、昨日、本周、上周、本月的等等常用的起始时间戳和结束时间戳的时间处理类
    thinkphp5 tp5 会话控制 session 登录 退出 检查检验登录 判断是否应该跳转到上次url
    微信 模板消息
    php 腾讯 地图 api 计算 坐标 两点 距离 微信 网页 WebService API
    php添加http头禁止浏览器缓存
  • 原文地址:https://www.cnblogs.com/imeiba/p/5141408.html
Copyright © 2011-2022 走看看