Я опоздал на вечеринку, но ни один из этих решений не работал для меня. Я очень хотел попробовать System.Linq.Dynamic, но я не мог найти это на Nuget, возможно, обесценился? В любом случае ...
Вот решения, которые я придумал. Мне нужно было динамически использовать смесь OrderBy, OrderByDescending и OrderBy> ThenBy.
Я просто создал метод расширения для моего объекта списка, немного взломанный, я знаю ... Я бы не рекомендовал это, если он было что-то, что я делал много, но это хорошо для одного.
List<Employee> Employees = GetAllEmployees();
foreach(Employee oEmployee in Employees.ApplyDynamicSort(eEmployeeSort))
{
//do stuff
}
public static IOrderedEnumerable<Employee> ApplyDynamicSort(this List<Employee> lEmployees, Enums.EmployeeSort eEmployeeSort)
{
switch (eEmployeeSort)
{
case Enums.EmployeeSort.Name_ASC:
return lEmployees.OrderBy(x => x.Name);
case Enums.EmployeeSort.Name_DESC:
return lEmployees.OrderByDescending(x => x.Name);
case Enums.EmployeeSort.Department_ASC_Salary_DESC:
return lEmployees.OrderBy(x => x.Department).ThenByDescending(y => y.Salary);
default:
return lEmployees.OrderBy(x => x.Name);
}
}