linq: как получить отсортированные записи из последнего идентификатора

У меня есть следующая таблица,

ItemTable, 

Col1 : ItemID(int)
Col2 : MRP(Decimal)

В одно из приложений, которое мне нужно было передать выбранному количеству элементов за раз, они вышлют мне последний идентификатор, который я им передал, первоначальным требованием было передать самые новые элементы, которые я смог получить, используя следующий запрос:

var itemList = itemRepository.AsQueryable()
             .Where(r => r.ProductID == productID && r.IsActive == true && r.ItemID< lastId)                                            
             .OrderByDescending(r => r.ItemID)
             .Take(numberOfItems)
             .ToList(); 

Однако теперь к нему добавлена ​​опция сортировки, то есть столбец MRP, хотя, опять же, у меня есть только последний идентификатор, как я могу получить это? Я попытался с помощью следующего запроса, не повезло.

var itemList = itemRepository.AsQueryable()
                 .Where(r => r.ProductID == productID && r.IsActive == true && r.ItemID< lastId)                                            
                 .OrderByDescending(r => r.ItemID)
                 .OrderBy(r => r.MRP)
                 .Take(numberOfItems)
                 .ToList(); 

ОБНОВЛЕНИЕ: рабочий код

Согласно предложению CamperWill, я обновил свой код и прекрасно работает с пропуском.

var itemList = itemRepository.AsQueryable()
                     .Where(r => r.ProductID == productID && r.IsActive == true)
                     .OrderBy(r => r.MRP)
                     .Skip(pageNumber * numberOfItems)
                     .Take(numberOfItems)
                     .ToList(); 

1 ответ

Решение

LastID не поможет вам с поиском по страницам, если вы сортируете по другому полю (ППМ). Кроме того, как указано в комментариях выше, первый порядок фактически игнорируется добавлением второго.

Вы можете отслеживать номер запрашиваемой страницы и использовать расширение Skip().

// input parameter 'page'
var itemList = itemRepository.AsQueryable()
    .Where(r => r.ProductID == productID && r.IsActive == true)       
    .OrderBy(r => r.MRP)
    .Skip( (page-1)*numberOfItems )
    .Take(numberOfItems)
    .ToList();
Другие вопросы по тегам