2013-12-25 2 views
0

У меня есть gridview, который я хочу сортировать. Я написал для него следующий метод:Сортировка Gridview с платформой Entity, не работающей по назначению

private void SortGridView(string sortExpression, string direction) 
    { 
     var constr = new AdminRequirementEF(); 
     string sort = string.Concat("it.", sortExpression, " ", direction); 
     int pageSize = Convert.ToInt32(ddPageSize.SelectedItem.Text); 

     var results = constr.Projects; 
     int totalRecords = results.Count(); 
     this.PopulatePager(totalRecords, pageIndex); 

     var sortedResults = constr.Projects.OrderBy(sort).Skip((pageIndex - 1) * pageSize).Take(pageNum).ToList(); 
     grdMain.DataSource = sortedResults; 
     grdMain.DataBind(); 
    } 

Проблема заключается в том, что сортировка применяется на тотальных данных не на страницах, отфильтрованных записей. Я хочу использовать OrderBy (sort) после применения skip и take, но это дает мне ошибку, заявив, что skip нельзя применить перед предложением orderby. Любая помощь будет высоко ценится.

+0

Какая версия EF это? Это должно сработать. Как выглядит сгенерированный SQL? –

ответ

1

Вы можете получить коллекцию constr.Projects рассортированы по его первичному ключу

результатов вара = constr.Projects.OrderBy (р => p.ProjectId)

, а затем применить пропуск и взять на себя Коллекция «результаты» с сортировкой.

Результаты = результаты.Skip ((pageIndex - 1) * pageSize) .Take (pageNum) .OrderBy (sort) .ToList();

Таким образом, вы получите записи для определенной страницы, отсортированные по мере необходимости.

+0

Нет, он не работает, попробовал это раньше. Я думаю, что Orderby (строковое значение) не может применяться после Skip-Take. – biki

Смежные вопросы