IQueryable查询器扩展Expression动态排序

  • 查询器扩展方法
  • 分页类

查询器扩展方法

/// <summary>/// 获取分页排序列表/// </summary>/// <typeparam name="T"></typeparam>/// <param name="queryable">查询器</param>/// <param name="PageIndex">当前页</param>/// <param name="PageSize">页大小</param>/// <param name="condition">查询条件</param>/// <param name="orderByExpression">排序表达式</param>/// <param name="IsDESC">是否降序</param>/// <returns></returns>public static async Task<List<T>> GetPageOrderList<T>(this IQueryable<T> queryable,  Expression<Func<T, bool>> condition, PageBase pageBase){var property = typeof(T).GetProperty(pageBase.SortField);var parameter = Expression.Parameter(typeof(T), "p");var propertyAccess = Expression.MakeMemberAccess(parameter, property);var orderByExp = Expression.Lambda(propertyAccess, parameter);var query = queryable.Where(condition);string methodName = pageBase.IsAsc ?"OrderBy" : "OrderByDescending";MethodCallExpression resultExp = Expression.Call(typeof(Queryable), methodName, new Type[] { typeof(T), property.PropertyType }, query.Expression, Expression.Quote(orderByExp));query = query.Provider.CreateQuery<T>(resultExp);pageBase.TotalCount = query.Count();var result =await query.Skip((pageBase.PageIndex - 1) * pageBase.PageSize).Take(pageBase.PageSize).ToListAsync();return result;}/// <summary>/// 获取排序列表/// </summary>/// <typeparam name="T"></typeparam>/// <param name="queryable">查询器</param>/// <param name="condition">查询条件</param>/// <param name="orderByExpression">排序表达式</param>/// <param name="IsDESC">是否降序</param>/// <returns></returns>public static async Task<List<T>> GetOrderList<T>(this IQueryable<T> queryable, Expression<Func<T, bool>> condition, PageBase pageBase){var property = typeof(T).GetProperty(pageBase.SortField, BindingFlags.IgnoreCase);var parameter = Expression.Parameter(typeof(T), "p");var propertyAccess = Expression.MakeMemberAccess(parameter, property);var orderByExp = Expression.Lambda(propertyAccess, parameter);var query = queryable.Where(condition);string methodName = pageBase.IsAsc ? "OrderBy" : "OrderByDescending";MethodCallExpression resultExp = Expression.Call(typeof(Queryable), methodName, new Type[] { typeof(T), property.PropertyType }, query.Expression, Expression.Quote(orderByExp));query = query.Provider.CreateQuery<T>(resultExp);pageBase.TotalCount = query.Count();var result = await query.ToListAsync();return result;}

分页类

public class PageBase{/// <summary>/// 当前页/// </summary>[Required(ErrorMessage = "页码不可为空.")]public int PageIndex { get; set; }/// <summary>/// 每页条数/// </summary>[Required(ErrorMessage = "每页大小不可为空.")]public int PageSize { get; set; }/// <summary>/// 排序列/// </summary>public string SortField { get; set; }/// <summary>/// 是否升序/// </summary>public bool IsAsc { get; set; }/// <summary>/// 总条数/// </summary>public int TotalCount { get; set; }/// <summary>/// 总页数/// </summary>public int TotalPage{get{if (TotalCount > 0){return TotalCount % PageSize > 0 ? (TotalCount / PageSize + 1) : TotalCount / PageSize;}return 0;}}}

IQueryable查询器扩展Expression动态排序相关推荐

  1. 使用该JavaBean可以将数据在JSP页面中以表格的形式显示出来 并具有动态排序 动态生成查询 自动分页功能

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 使用该类 ...

  2. c ++函数功能查询器_C ++ 17新功能和技巧

    c ++函数功能查询器 目录 (Table of Contents) Introduction 介绍 Settings an integrated development environment (I ...

  3. 【JEECG技术博文】Jeecg高级查询器

    一.背景       对于用户来讲查询功能按易用性分三个层次: 1. 最简单查询操作是一个输入框,全文检索,如百度,后台实现技术使用搜索引擎,需要设计和建立索引,技术较为复杂,适用于文档和信息数据库检 ...

  4. ActiveReports 报表应用教程 (9)---交互式报表之动态排序

    在 ActiveReports 中除了提供对数据源进行排序的功能之外,还提供了最终用户排序功能,最终用户可以对报表进行区域内排序和整个数据源排序,结合数据钻取.过滤等功能可以让用户更方便地分析报表数据 ...

  5. 【JEECG技术文档】Jeecg高级查询器

    1. 背景 对于用户来讲查询功能按易用性分三个层次: 1)最简单查询操作是一个输入框,全文检索,如百度,后台实现技术使用搜索引擎,需要设计和建立索引,技术较为复杂,适用于文档和信息数据库检索,但是结果 ...

  6. mysql 连接查询_Swoole 实战:MySQL 查询器的实现(协程连接池)

    Swoole 实战:MySQL 查询器的实现(协程连接池) 需求分析 本篇我们将通过 Swoole 实现一个自带连接池的 MySQL 查询器: 1. 支持通过链式调用构造并执行 SQL 语句: 2. ...

  7. 使用Canvas扩展绘制动态ASP.NET Core Blazor条形图

    目录 介绍 背景 使用代码 步骤1:创建ASP.NET Core Blazor服务器应用程序 运行测试应用程序 步骤2:安装软件包 步骤3:建立模型类别 创建服务类 步骤4:将服务添加到Startup ...

  8. elasticsearch的查询器query与过滤器filter的区别

    很多刚学elasticsearch的人对于查询方面很是苦恼,说实话es的查询语法真心不简单-  当然你如果入门之后,会发现elasticsearch的rest api设计是多么有意思. 说正题,ela ...

  9. 编写windbg调试器扩展 入门篇1

    我博客的左侧专栏曾经转过windows下编写调试器的一系列文章,这类文章是从零打造调试器,而这篇文章是介绍如何为windbg编写调试器扩展命令. 0.前言 windbg的命令有很多,其中以" ...

最新文章

  1. ABAP性能实例七例
  2. js页面跳转或重定向
  3. python 清空文件夹_Python初学者请注意!别这样直接运行python命令,否则电脑等于“裸奔”...
  4. 汇编对sp指针进行修改_从汇编理解函数调用的过程
  5. 如何做嵌入式人工智能
  6. MyBatis 之 SqlMapConfig.xml 配置
  7. scratch冬天下雪了 电子学会图形化编程scratch等级考试三级真题和答案解析2022年3月
  8. 华擎主板bios设置图解_华擎主板bios设置图解 如何进入bios设置 BIOS设置图解教程...
  9. CPC系统在win10上的安装,1小时快速安装
  10. java 定时凌晨_Java定时任务,每天凌晨1点执行
  11. 【转载】SCI论文配图配色方案参考网站
  12. 一年级课程表(4月2日-4月8日)
  13. 生信过程中的各种文件格式
  14. 拒酒词,好难找哟,留到有用
  15. USES_CONVERSION的使用和注意
  16. 【python】用python实现多个excel合并成一个excel文件------直接上代码
  17. deskvideosys终端安全管理软件主要功能介绍
  18. win10平板续航测试软件,你的Win10笔电/平板续航如何?系统电池报告全揭秘
  19. 访问http请求, webservice接口报错证书问题
  20. 遥感图像融合(一)——遥感图像的相关概念

热门文章

  1. Vue中svga特效展示
  2. 微软CVE-2023-28252漏洞
  3. 如何查看linux kernel邮件列表
  4. canal mysql to es 部署操作流程文档
  5. 商业银行贷款业务电子签:防范萝卜章-保存证据链-安全高效放款
  6. 树莓派人脸识别_最全树莓派资料分享 顺手秀一下自己的杰作
  7. 从新浪网搜刮的js函数和类
  8. Android微信分享功能集成开发指南(这一篇就够了)
  9. 记忆术和导图,激发强大记忆潜能
  10. Centos7卸载软件或程序