2015-05-10 2 views
2

Я пытаюсь вернуть список обновлений статуса, упорядоченных по вставленной дате, в порядке убывания. Этот список отображается в частичном представлении, поэтому я не могу использовать контроллер для сортировки списка. Решение было создать класс обслуживания, который включает в себя этот код:System.NotSupportedException при создании обратного списка

var StatusResult = (from status in db.UserStatuses 
        orderby status.DateInserted 
        select status).Reverse().ToList(); 
return StatusResult; 

Когда я бегу, я получаю эту ошибку:

An exception of type 'System.NotSupportedException' occurred in EntityFramework.SqlServer.dll but was not handled in user code

Additional information: LINQ to Entities does not recognize the method 'System.Linq.IQueryable 1[Project.Models.UserStatus] Reverse[UserStatus](System.Linq.IQueryable 1[Project.Models.UserStatus])' method, and this method cannot be translated into a store expression.

Может кто-нибудь помочь мне понять, что происходит и как это исправить ?

ответ

4

EF не знает, как сказать SQL Server, чтобы отменить результаты запроса, поэтому ваш запрос терпит неудачу при его выполнении. Хотя возможно, лучший способ сделать это, чтобы просто попросить результатов запроса, отсортированных в порядке убывания:

var StatusResult = (from status in db.UserStatuses 
        orderby status.DateInserted descending 
        select status).ToList(); 
return StatusResult; 
+0

Спасибо, связка. Я не знал, что могу написать «нисходящий» после DateInserted –

3

Reverse() применяется к IQueryable<UserStatus> и попытался быть переведенным на SQL провайдером запросов Entity Framework - и it isn't supported.

Для решения насущной проблемы, вы убедитесь, что это произойдет в памяти при переходе на IEnumerable<UserStatus> первый:

var statusResult = (from status in db.UserStatuses 
        orderby status.DateInserted 
        select status).AsEnumerable().Reverse().ToList(); 

Однако, было бы больше смысла, чтобы просто заказать по убыванию вместо:

var statusResult = (from status in db.UserStatuses 
        orderby status.DateInserted descending 
        select status).ToList(); 
+0

Спасибо. Я собираюсь использовать метод убывания. –

+0

Это было бы лучшим решением, так как сортировка будет выполняться SQL-базой данных, а не в памяти. –

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