IQueryable查询器扩展Expression动态排序
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动态排序相关推荐
- 使用该JavaBean可以将数据在JSP页面中以表格的形式显示出来 并具有动态排序 动态生成查询 自动分页功能
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 使用该类 ...
- c ++函数功能查询器_C ++ 17新功能和技巧
c ++函数功能查询器 目录 (Table of Contents) Introduction 介绍 Settings an integrated development environment (I ...
- 【JEECG技术博文】Jeecg高级查询器
一.背景 对于用户来讲查询功能按易用性分三个层次: 1. 最简单查询操作是一个输入框,全文检索,如百度,后台实现技术使用搜索引擎,需要设计和建立索引,技术较为复杂,适用于文档和信息数据库检 ...
- ActiveReports 报表应用教程 (9)---交互式报表之动态排序
在 ActiveReports 中除了提供对数据源进行排序的功能之外,还提供了最终用户排序功能,最终用户可以对报表进行区域内排序和整个数据源排序,结合数据钻取.过滤等功能可以让用户更方便地分析报表数据 ...
- 【JEECG技术文档】Jeecg高级查询器
1. 背景 对于用户来讲查询功能按易用性分三个层次: 1)最简单查询操作是一个输入框,全文检索,如百度,后台实现技术使用搜索引擎,需要设计和建立索引,技术较为复杂,适用于文档和信息数据库检索,但是结果 ...
- mysql 连接查询_Swoole 实战:MySQL 查询器的实现(协程连接池)
Swoole 实战:MySQL 查询器的实现(协程连接池) 需求分析 本篇我们将通过 Swoole 实现一个自带连接池的 MySQL 查询器: 1. 支持通过链式调用构造并执行 SQL 语句: 2. ...
- 使用Canvas扩展绘制动态ASP.NET Core Blazor条形图
目录 介绍 背景 使用代码 步骤1:创建ASP.NET Core Blazor服务器应用程序 运行测试应用程序 步骤2:安装软件包 步骤3:建立模型类别 创建服务类 步骤4:将服务添加到Startup ...
- elasticsearch的查询器query与过滤器filter的区别
很多刚学elasticsearch的人对于查询方面很是苦恼,说实话es的查询语法真心不简单- 当然你如果入门之后,会发现elasticsearch的rest api设计是多么有意思. 说正题,ela ...
- 编写windbg调试器扩展 入门篇1
我博客的左侧专栏曾经转过windows下编写调试器的一系列文章,这类文章是从零打造调试器,而这篇文章是介绍如何为windbg编写调试器扩展命令. 0.前言 windbg的命令有很多,其中以" ...
最新文章
- ABAP性能实例七例
- js页面跳转或重定向
- python 清空文件夹_Python初学者请注意!别这样直接运行python命令,否则电脑等于“裸奔”...
- 汇编对sp指针进行修改_从汇编理解函数调用的过程
- 如何做嵌入式人工智能
- MyBatis 之 SqlMapConfig.xml 配置
- scratch冬天下雪了 电子学会图形化编程scratch等级考试三级真题和答案解析2022年3月
- 华擎主板bios设置图解_华擎主板bios设置图解 如何进入bios设置 BIOS设置图解教程...
- CPC系统在win10上的安装,1小时快速安装
- java 定时凌晨_Java定时任务,每天凌晨1点执行
- 【转载】SCI论文配图配色方案参考网站
- 一年级课程表(4月2日-4月8日)
- 生信过程中的各种文件格式
- 拒酒词,好难找哟,留到有用
- USES_CONVERSION的使用和注意
- 【python】用python实现多个excel合并成一个excel文件------直接上代码
- deskvideosys终端安全管理软件主要功能介绍
- win10平板续航测试软件,你的Win10笔电/平板续航如何?系统电池报告全揭秘
- 访问http请求, webservice接口报错证书问题
- 遥感图像融合(一)——遥感图像的相关概念