Попытка настроить OrderBy с помощью IQueryable - ошибка метода «Пропустить» - PullRequest
1 голос
/ 16 февраля 2011

Первая часть моего кода получает результаты данных IQueryable:

var issues = repository.GetAllIssues().Where(i => 
                  i.IssueNotificationRecipients.Any(r => r.Status == "Open"));

Затем я определяю, какой порядок сортировки запросил пользователь, и добавляю его:

switch (sort)
{
case 1:
    issues.OrderBy(x => x.Customer);
    break;
case 2:
    issues.OrderBy(x => x.Description);
    break;
case 3:
    issues.OrderBy(x => x.CreatedBy);
    break;
default:
    issues.OrderBy(x => x.DueDateTime);
    break;
}

Это выдаетошибка:

Метод «Пропустить» поддерживается только для отсортированного ввода в LINQ to Entities.Метод 'OrderBy' должен быть вызван перед методом 'Пропустить'

Итак, как я могу динамически добавить OrderBy, в ответ на ввод моего пользователя?

Ответы [ 2 ]

2 голосов
/ 16 февраля 2011

Возможно, вы имели в виду

switch (sort)
{
case 1:
    issues = issues.OrderBy(x => x.Customer);
    break;
case 2:
    issues = issues.OrderBy(x => x.Description);
    break;
case 3:
    issues = issues.OrderBy(x => x.CreatedBy);
    break;
default:
    issues = issues.OrderBy(x => x.DueDateTime);
    break;
}

Возможно, вам придется изменить тип issues или установить его в новую переменную, поскольку он возвращает IOrderedQueryable<T>

2 голосов
/ 16 февраля 2011

Вы не показали нам весь свой код, но одна проблема заключается в том, что вы ожидаете от issues.OrderBy(..) до видоизменения запроса, на который ссылается переменная issues. Но на самом деле это не так; он возвращает новый IOrderedQueryable, который представляет упорядоченную версию исходного запроса.

Поскольку ваши операции заказа на самом деле не касаются запрашиваемого, называемого вашей переменной issues; имеет смысл, что вызов Skip приведет к полученной вами ошибке, потому что на самом деле не был отсортирован.

Вы, вероятно, хотите сделать:

issues = issues.OrderBy(...);
...