C# Sort Generic List Using Lambda Expression For Dynamic Type And Dynamic Property
/// Lifted from http://microsoftprogrammers.jebarson.com/sort-generic-list-using-lambda-expression-for-dynamic-type-and-dynamic-property/
/// Usage :
/// List<Employee> sortedEmployees = new Utility<Employee>().GetSortedList(employeeList, "City", SortDirection.Ascending);
public class Utility<T>
{
/// <Summary>
/// Gets the sorted list.
/// </Summary>
/// <param name="source" />The source.
/// <param name="sortColumn" />The sort column.
/// <param name="sortDirection" />The sort direction.
/// <The sorted list. />
private List<T> GetSortedList(List<T> source, string sortColumn, SortDirection sortDirection)
{
// Prepare the dynamic sort expression
var paramExp = Expression.Parameter(typeof(T), typeof(T).ToString());
Expression propConvExp =
Expression.Convert(Expression.Property(paramExp, sortColumn), typeof(object));
var sortExp = Expression.Lambda>(propConvExp, paramExp);
if (sortDirection == SortDirection.Ascending)
{
return source.AsQueryable().OrderBy(sortExp).ToList();
}
else
{
return source.AsQueryable().OrderByDescending(sortExp).ToList();
}
}
}