Как я могу отсортировать список <T>, когда пользователь нажимает на заголовок таблицы? - PullRequest
1 голос
/ 12 февраля 2009

Я пишу приложение asp.net mvc и получаю список сервисных вызовов, которые я отображаю в таблице. Когда пользователь щелкает заголовок таблицы, я хочу сказать своему контроллеру отсортировать список по этому столбцу.

public ActionResult Index(int? page, string sortBy, string sortDirection)
    {
        int pageIndex = page == null ? 0 : (int)page - 1;

        IServiceCallService scService = new ServiceCallService();
        IPagedList<ServiceCall> serviceCalls = scService.GetOpenServiceCalls("").ToPagedList(pageIndex, 2);

        return View("List", serviceCalls);
    }

Как мне включить sortBy и sortDirection. Я думаю, что мог бы сделать что-то вроде:

IPagedList<ServiceCall> serviceCalls = sc.Service.GetOpenServiceCalls("").OrderBy(sortBy).ToPagedList(pageIndex, 2);

Но это не работает, потому что я предполагаю, что OrderBy хочет лямбду типа p => p.CreateDate, но не уверен, как это сделать.

Я знаю способы, которыми я мог бы это сделать, но они безобразны, и я уверен, что в C # есть кое-что простое, что я просто скучаю.

Спасибо.

Ответы [ 3 ]

4 голосов
/ 12 февраля 2009

Не забывайте о удобном DataBinder:

var serviceCalls = sc.Service.GetOpenServiceCalls("").OrderBy(call => DataBinder.Eval(call, sortBy));
return serviceCalls.ToPagedList(pageIndex, 2);

DataBinder.Eval из Msdn docs

Использует рефлексию для анализа и оценки выражение привязки данных снова объект во время выполнения.

0 голосов
/ 12 февраля 2009

Вы также можете использовать jQuery и использовать что-то вроде Table Sorter , если вы просто хотите отсортировать список. Это также было бы в режиме реального времени и все Ajax-у.

0 голосов
/ 12 февраля 2009

При сортировке общего списка вы можете предоставить способ сравнения для сортировки с перегрузкой List<T>.Sort():

public void Sort(
    Comparison<T> comparison
)

Здесь - пример из MSDN. Comparison<T> сравнение - это делегат, предоставляющий метод сравнения объектов при сортировке.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...