博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET MVC5+EF6+EasyUI 后台管理系统(17)-LinQ动态排序
阅读量:6886 次
发布时间:2019-06-27

本文共 2162 字,大约阅读时间需要 7 分钟。

首先修复程序中的一个BUG这个BUG在GridPager类中,把sord修改为sort这个名称填写错误,会导致后台一直无法获取datagrid的排序字段

本来是没有这一讲的,为了使20行的代码精简成2行,我查阅了一些资料,借鉴了一些大神的建议,首先感谢第八讲中,11楼@nyth和15楼@红颜醉丶帝的建议投递,每一次的的排序要都一个判断这的确很麻烦,我们利用反射来解决这个问题。

先看原来的代码

//排序            if (pager.order == "desc")            {                switch (pager.order)                {                    case "CreateTime":                        queryData = queryData.OrderByDescending(c => c.CreateTime);                        break;                    case "Name":                        queryData = queryData.OrderByDescending(c => c.Name);                        break;                    default:                        queryData = queryData.OrderByDescending(c => c.CreateTime);                        break;                }            }            else            {                switch (pager.order)                {                    case "CreateTime":                        queryData = queryData.OrderBy(c => c.CreateTime);                        break;                    case "Name":                        queryData = queryData.OrderBy(c => c.Name);                        break;                    default:                        queryData = queryData.OrderBy(c => c.CreateTime);                        break;                }            }

以上每一次排序都要进行判断,利用反射可以解决这个问题,我把他封装起来了。(需要对反射有一些理解)

在App.Common中新建LinqHelper类代码如下(下面有3个方法,我都对方法进行了注释,看下就明白)

 
View Code

 

我们对Sorting的代码分析如下:

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);

执行排序

现在我们修改一下SysSample的BLL层

将以上的代码修改为

queryData = LinqHelper.DataSorting(queryData,pager.sort,pager.order);

我们的代码顿时精简成了一行,赞一个吧。

本文转自ymnets博客园博客,原文链接:http://www.cnblogs.com/ymnets/p/3446221.html,如需转载请自行联系原作者

你可能感兴趣的文章
微信小程序教程01:小程序简介
查看>>
Spring 属性配置
查看>>
Vue-loader 的巧妙玩法
查看>>
Vue-vuex
查看>>
【Vue.js 牛刀小试】02:第二章 - 常见的指令的使用
查看>>
KOA2 compose 串联中间件实现(洋葱模型)
查看>>
基于NodeJS的HTTP server Plus 1:Range (范围请求)
查看>>
JS的节流、函数防抖 原理及使用场景
查看>>
源码阅读中的收获
查看>>
关于JVM学还是不学
查看>>
快速探索,音视频技术不再神秘
查看>>
什么?强化学习竟然来源于心理学?
查看>>
Java Web现代化开发:Spring Boot + Mybatis + Redis二级缓存
查看>>
Jenkins安装及自动部署Maven项目
查看>>
SpringBoot集成阿里巴巴Druid监控
查看>>
正则表达式速查笔记
查看>>
从零搭建自己的SpringBoot后台框架(五)
查看>>
关于passive event listener的一次踩坑
查看>>
BlockingQueue与Condition原理解析
查看>>
webpack 3 零基础入门教程 #1 - 介绍
查看>>