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

Вопрос:

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

ItemTable,

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

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

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

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

Согласно CamperWive suggestesstion, я обновил свой код и отлично справился с пропуском.

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

Лучший ответ:

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

Вы можете отслеживать номер запрашиваемой страницы и использовать расширение 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();

Оцените статью
TechArks.Ru
Добавить комментарий