天天看點

建構ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的背景管理系統(17)-LinQ動态排序

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

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

先看原來的代碼

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

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

建構ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的背景管理系統(17)-LinQ動态排序
建構ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的背景管理系統(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層

将以上的代碼修改為

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

繼續閱讀