代码如下
代码
1 /// <summary>
2 /// 对已有List进行排序
3 /// </summary>
4 /// <typeparam name="T">泛型</typeparam>
5 /// <param name="list">已有List</param>
6 /// <param name="fieldName">要进行排序的列名</param>
7 /// <param name="sortType">排序类型</param>
8 /// <returns>排序后的List</returns>
9 public static List<T> ListSort<T>(IList<T> list, string fieldName, SortDirection sortType)
10 {
11 IList<FieldInfo> fieldInfos = GetFieldInfos(typeof(T));
12 foreach (FieldInfo fiItem in fieldInfos)
13 {
14 if (fiItem.Name.ToLower() == fieldName.ToLower())
15 {
16 if (sortType == SortDirection.Ascending)
17 {
18 // 正序时
19 return list.OrderBy(cell => fiItem.GetValue(cell)).ToList();
20 }
21 else if (sortType == SortDirection.Descending)
22 {
23 // 倒序时
24 return list.OrderByDescending(cell => fiItem.GetValue(cell)).ToList();
25 }
26 }
27 }
28
29 return null;
30 }
2 /// 对已有List进行排序
3 /// </summary>
4 /// <typeparam name="T">泛型</typeparam>
5 /// <param name="list">已有List</param>
6 /// <param name="fieldName">要进行排序的列名</param>
7 /// <param name="sortType">排序类型</param>
8 /// <returns>排序后的List</returns>
9 public static List<T> ListSort<T>(IList<T> list, string fieldName, SortDirection sortType)
10 {
11 IList<FieldInfo> fieldInfos = GetFieldInfos(typeof(T));
12 foreach (FieldInfo fiItem in fieldInfos)
13 {
14 if (fiItem.Name.ToLower() == fieldName.ToLower())
15 {
16 if (sortType == SortDirection.Ascending)
17 {
18 // 正序时
19 return list.OrderBy(cell => fiItem.GetValue(cell)).ToList();
20 }
21 else if (sortType == SortDirection.Descending)
22 {
23 // 倒序时
24 return list.OrderByDescending(cell => fiItem.GetValue(cell)).ToList();
25 }
26 }
27 }
28
29 return null;
30 }
上面红色部分为取得泛型T的字段列表, 当然, 这里使用的是字段, 如果你喜欢属性, 换成取属性列表就OK了~
代码
1 public static IList<FieldInfo> GetFieldInfos(Type t)
2 {
3 IList<FieldInfo> list = new List<FieldInfo>();
4 BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic;
5 do
6 {
7 foreach (FieldInfo fi in t.GetFields(flags))
8 {
9 list.Add(fi);
10 }
11 t = t.BaseType;
12
13 } while (t != null);
14
15 return list;
16 }
2 {
3 IList<FieldInfo> list = new List<FieldInfo>();
4 BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic;
5 do
6 {
7 foreach (FieldInfo fi in t.GetFields(flags))
8 {
9 list.Add(fi);
10 }
11 t = t.BaseType;
12
13 } while (t != null);
14
15 return list;
16 }