Сбой вкладки MVC в .OrderBy () с исключением из NHibernate - PullRequest
0 голосов
/ 31 октября 2011

Я следил за этим хорошим пошаговым руководством по созданию сетки с использованием MVC contrib.

Однако в моей версии используется NHibernate, а не linq для сущностей.

Кодработает нормально вплоть до точки сортировки.

    public ActionResult Index(string clientName, int? countryId, GridSortOptions gridSortOptions, int? page)
    {
        var clientList = from c in this.ClientRepository.Query
                         select new ListedClientViewModel(c);

        //Set default sort column
        if (string.IsNullOrWhiteSpace(gridSortOptions.Column))
            gridSortOptions.Column = "ClientName";

        // Filter on clientName
        if (!string.IsNullOrWhiteSpace(clientName))
            clientList = clientList.Where(c => c.ClientName.StartsWith(clientName));

        // Filter on country
        if (countryId.HasValue)
            clientList = clientList.Where(c => c.CountryId == countryId);

        // Order and page the clients
        var clientPageList = clientList
            //Sorting causes error.
            //.OrderBy(gridSortOptions.Column, gridSortOptions.Direction)
            .AsPagination(page ?? 1, 10);

        var clientListContainer = new ClientListContainerViewModel
        {
            ClientPageList = clientPageList,
            GridSortOptions = gridSortOptions
        };

        return View(clientListContainer);
    }

Если я раскомментирую строку .OrderBy(gridSortOptions.Column, gridSortOptions.Direction), она потерпит неудачу, когда попадет в представление с System.NotSupportedException {"NewExpression"}

Любые идеи, как яможно решить эту проблему?

Большое спасибо, Кохан.

1 Ответ

0 голосов
/ 31 октября 2011

Решено ... Просто нужно было привести модель представления позже после применения фильтрации и упорядочения.

  var clientList = this.ClientRepository.Query;

  ...
  ...

  // Order and page the clients
  var clientPageList = clientList
       //Sorting no longer causes error.
       .OrderBy(gridSortOptions.Column, gridSortOptions.Direction)
       .Select(c => new ListedClientViewModel(c))
       .AsPagination(page ?? 1, 10);
...