您可以通過Extension Methods和Creating Expression Trees動態像
public static IOrderedQueryable<T> OrderByDescending<T>(this IQueryable<T> enumerable, string sortColumn)
{
var param = Expression.Parameter(typeof(T), "x");
var mySortExpression = Expression.Lambda<Func<T, object>>(Expression.Property(param, sortColumn), param);
return enumerable.OrderByDescending(mySortExpression);;
}
,並做到這一點的排序依據
public static IOrderedQueryable<T> OrderBy<T>(this IQueryable<T> enumerable, string sortColumn)
{
var param = Expression.Parameter(typeof(T), "x");
var mySortExpression = Expression.Lambda<Func<T, object>>(Expression.Property(param, sortColumn), param);
return enumerable.OrderBy(mySortExpression);;
}
,你可以在一個像
public static IOrderedQueryable<T> OrderBy<T>(this IQueryable<T> enumerable, string sortColumn, string direction)
{
var param = Expression.Parameter(typeof(T), "x");
var mySortExpression = Expression.Lambda<Func<T, object>>(Expression.Property(param, sortColumn), param);
IOrderedQueryable<T> iQuery;
switch(direction)
{
case "desc":
iQuery = enumerable.OrderByDescending(mySortExpression);
break;
case "asc":
default :
iQuery = enumerable.OrderBy(mySortExpression);
break;
}
return iQuery;
}
結合這兩種然後,你可以這樣調用它objList.OrderBy("Level","asc")
//對於升序 objList.OrderBy("Level","desc")
//降序
希望這將有助於
反思救援。當心它可能會很慢,但。 –
是的,我看到了方法來獲取屬性名稱,類型但無法找到我需要的。可能bcoz我不熟悉反射。 – Sunil