110,502
社区成员
发帖
与我相关
我的任务
分享
public static IEnumerable<T> OrderBy<T>(this IEnumerable<T> list, string sortExpression) { sortExpression += ""; string[] parts = sortExpression.Split(' '); bool descending = false; string property = ""; if (parts.Length > 0 && parts[0] != "") { property = parts[0]; if (parts.Length > 1) { descending = parts[1].ToLower().Contains("esc"); } PropertyInfo prop = typeof(T).GetProperty(property); if (prop == null) { throw new Exception("No property '" + property + "' in + " + typeof(T).Name + "'"); } if (descending) return list.OrderByDescending(x => prop.GetValue(x, null)); else return list.OrderBy(x => prop.GetValue(x, null)); } return list; }
Example:
class Customer { public string Name{get;set;} }
var list = new List<Customer>();
list.OrderBy("Name desc");
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading;
namespace AroLibraries.ExtensionMethods.Enumerable
{
public static class IEnumerableExt
{
public static IOrderedEnumerable<TSource> Ext_OrderBy<TSource, TKey>(this IEnumerable<TSource> enumerable, Func<TSource, TKey> keySelector, bool descending)
{
if (enumerable == null) { return null; }
if (descending)
{
return enumerable.OrderByDescending(keySelector);
}
return enumerable.OrderBy(keySelector);
}
public static IOrderedEnumerable<TSource> Ext_OrderBy<TSource>(this IEnumerable<TSource> enumerable, Func<TSource, IComparable> keySelector1, Func<TSource, IComparable> keySelector2, params Func<TSource, IComparable>[] keySelectors)
{
if (enumerable == null)
{
return null;
}
IEnumerable<TSource> current = enumerable;
if (keySelectors != null)
{
for (int i = keySelectors.Length - 1; i >= 0; i--)
{
current = current.OrderBy(keySelectors[i]);
}
} current = current.OrderBy(keySelector2);
return current.OrderBy(keySelector1);
}
public static IOrderedEnumerable<TSource> Ext_OrderBy<TSource>(this IEnumerable<TSource> enumerable, bool descending, Func<TSource, IComparable> keySelector, params Func<TSource, IComparable>[] keySelectors)
{
if (enumerable == null)
{
return null;
}
IEnumerable<TSource> current = enumerable; if (keySelectors != null)
{
for (int i =
keySelectors.Length - 1; i >= 0; i--)
{
current = current.Ext_OrderBy(keySelectors[i], descending);
}
} return current.Ext_OrderBy(keySelector, descending);
}
}
}