Вот моя функция для сортировки:
Код: Выделить всё
IQueryable GetSortedData(IQueryable result, String orderby, bool desc)
{
switch (orderby.ToLower())
{
case "id":
result = result.OrderBy(c => c.Id);
break;
case "code":
result = result.OrderBy(c => c.Code);
break;
case "active":
result = result.OrderBy(c => c.Active);
break;
default:
result = result.OrderBy(c => c.Name);
break;
}
if (pageData.SortDesc)
{
var res = result.ToList();
res.Reverse();
return res.AsQueryable();
}
return result;
}
- Слишком много повторяющегося кода. Если бы это был запрос «чистого SQL», он выглядел бы так:
SELECT * FROM data_table
ORDER BY
CASE @OrderBy
WHEN 'id' THEN id
WHEN 'code' THEN code
WHEN 'active' THEN active
ELSE name
END
; - Преобразование в список и обратно для реверсирования. Я не могу изменить тип возвращаемого значения и определенно не хочу писать еще больше бесполезного кода (по сути, удваивая переключатель case с помощью OrderByDescending).
Подробнее здесь: https://stackoverflow.com/questions/457 ... by-in-linq
Мобильная версия