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();