Linq & Paging - невозможно вернуть постраничные данные с помощью OrderBy - PullRequest
9 голосов
/ 19 октября 2011

Я пытался реализовать простую систему подкачки на службе WCF, которую я написал, которая использует Linq To SQL Для запроса базы данных, но, похоже, переходит от одной проблемы к другой.

Я хочуСлужба WCF возвращает список этого типа:

[DataContract]
public class TestType
{
    [DataMember]
    public int ID { get; set; }
    [DataMember]
    public string Name { get; set; }
}

, и я использую следующий код:

int pageNumber = 0;
int pageSize = 25;

List<TestType> results = (from caseTypes in context.cch
                          select new TestType()
                          {
                              ID = caseTypes.cch_id,
                              Name = caseTypes.cch_case_ref
                          }                               
                          ).Skip((pageNumber - 1) * pageSize).Take(pageSize).ToList<TestType>(); 

Однако, когда я запускаю код, я получаю сообщение об ошибке:

The method 'Skip' is only supported for sorted input in LINQ to Entities. The method 'OrderBy' must be called before the method 'Skip'.

Итак, если я изменю код для добавления заказа:

List<TestType> results = (from caseTypes in context.cch
                          orderby caseTypes.cch_id
                          select new TestType()
                          {
                               ID = caseTypes.cch_id,
                               Name = caseTypes.cch_case_ref
                          }                               
                          ).Skip((pageNumber - 1) * pageSize).Take(pageSize).ToList<TestType>(); 

Затем я получаю сообщение об ошибке:

Count must have a non-negative value.
Parameter name: count

Ядаже подходя к этому поиску правильно?

1 Ответ

28 голосов
/ 19 октября 2011

Вы инициализировали номер страницы как 0, так что -1 - это параметр пропуска, на который он жалуется.Инициализируйте страницу как 1.

...