Динамический порядок в LinqC#

Место общения программистов C#
Ответить
Anonymous
 Динамический порядок в Linq

Сообщение Anonymous »

У меня есть приложение, которое обращается к базе данных и должно упорядочивать результаты по разным полям в зависимости от ввода.

Вот моя функция для сортировки:

Код: Выделить всё

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).
Может ли кто-нибудь предложить способы сделать эту функцию более привлекательной, предпочтительно по-прежнему используя LINQ?

Подробнее здесь: https://stackoverflow.com/questions/457 ... by-in-linq
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»