天天看點

ASP.NET MVC5+EF6+EasyUI 背景管理系統(17)-LinQ動态排序

首先修複程式中的一個BUG這個BUG在GridPager類中,把sord修改為sort這個名稱填寫錯誤,會導緻背景一直無法擷取datagrid的排序字段

本來是沒有這一講的,為了使20行的代碼精簡成2行,我查閱了一些資料,借鑒了一些大神的建議,首先感謝第八講中,11樓@nyth和15樓@紅顔醉丶帝的建議投遞,每一次的的排序要都一個判斷這的确很麻煩,我們利用反射來解決這個問題。

先看原來的代碼

ASP.NET MVC5+EF6+EasyUI 背景管理系統(17)-LinQ動态排序
ASP.NET MVC5+EF6+EasyUI 背景管理系統(17)-LinQ動态排序

以上每一次排序都要進行判斷,利用反射可以解決這個問題,我把他封裝起來了。(需要對反射有一些了解)

在App.Common中建立LinqHelper類代碼如下(下面有3個方法,我都對方法進行了注釋,看下就明白)

ASP.NET MVC5+EF6+EasyUI 背景管理系統(17)-LinQ動态排序

 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層

将以上的代碼修改為

我們的代碼頓時精簡成了一行,贊一個吧。

本文轉自ymnets部落格園部落格,原文連結:http://www.cnblogs.com/ymnets/p/3446221.html,如需轉載請自行聯系原作者

繼續閱讀