Передача поля в функцию для сортировки по этому полю - PullRequest
2 голосов
/ 25 января 2012

Я пишу функцию с такой подписью, где я сортирую данные модели среди прочего:

public MyModel GetModel(IQueryable<Something> query, string sort, 
   int page, int PageSize)
{
   ...
   viewModel.Something = query.OrderByDescending(o => sort)
          .Skip((page - 1) * pageSize).Take(pageSize).ToList();
   ...
}

Проблема в том, что я хочу передать параметр сортировки по умолчанию, который я хочу отсортировать, если параметр "сортировка" равен нулю или пуст. Например, это может быть:

.OrderByDescending(o => o.AddedDate);

Я перепробовал все виды вещей (например, передавал в Func) что-то для этой функции, чтобы сказать ей использовать AddedDate или что бы я ни выбрал для сортировки записей, если сортировка пуста, но ничего не работает. Как бы мне реализовать такую ​​вещь?

Ответы [ 2 ]

3 голосов
/ 25 января 2012

Ваш текущий код не имеет особого смысла - вы сортируете по одному значению, а не по свойству элементов, которые хотите отсортировать, - если вы хотите иметь возможность сортировки по любому строковому свойству в вашем классе Somethingболее подходящим будет:

public MyModel GetModel(IQueryable<Something> query, Func<Something, string> sort, 
   int page, int PageSize)
{
   Func<Something, string> actualSort = sort ?? (o => o.AddedDate);
   ...
   viewModel.Something = query.OrderByDescending(actualSort)
          .Skip((page - 1) * pageSize).Take(pageSize).ToList();
   ...
}

Теперь, если вы передадите null для sort, сортировка вернется к порядку сортировки по умолчанию на AddedDate.

1 голос
/ 25 января 2012

Лучше всего использовать Dynamic Linq .Позволяет передать ключ сортировки в виде строки:

query.OrderByDescending(sort)...
...