首先修複程式中的一個BUG這個BUG在GridPager類中,把sord修改為sort這個名稱填寫錯誤,會導緻背景一直無法擷取datagrid的排序字段
本來是沒有這一講的,為了使20行的代碼精簡成2行,我查閱了一些資料,借鑒了一些大神的建議,首先感謝第八講中,11樓@nyth和15樓@紅顔醉丶帝的建議投遞,每一次的的排序要都一個判斷這的确很麻煩,我們利用反射來解決這個問題。
先看原來的代碼
以上每一次排序都要進行判斷,利用反射可以解決這個問題,我把他封裝起來了。(需要對反射有一些了解)
在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層
将以上的代碼修改為
我們的代碼頓時精簡成了一行,贊一個吧。
本文轉自ymnets部落格園部落格,原文連結:http://www.cnblogs.com/ymnets/p/3446221.html,如需轉載請自行聯系原作者