В данный момент ваш код не работает - вы вызываете OrderBy / OrderByDescending, но не используете результат. Вам нужно
query = query.OrderBy(param);
и т.д.
Что касается условного упорядочения - проблема в том, что вы не можете объявить тип param
, потому что тип ключа упорядочения может сильно различаться в зависимости от выражения сортировки.
В качестве обходного пути вы можете написать собственный метод расширения:
public static IOrderedQueryable<TSource> OrderByWithDirection<TSource, TKey>
(this IQueryable<TSource> source,
Expression<Func<TSource, TKey>> keySelector,
bool ascending)
{
return ascending ? source.OrderBy(keySelector)
: source.OrderByDescending(keySelector);
}
Ваш код станет:
IQueryable<User> query = (from c in users select c).AsQueryable<User>();
switch (e.SortExpression)
{
case "Name":
query = query.OrderByWithDirection(c => c.Name, isAscending);
break;
// etc
default:
break;
}
(Кстати, почему вы звоните AsQueryable
?)