Я прочитал много связанных вопросов, но не могу найти его точно.
Я пытаюсь настроить порядок на СТАРОЙ веб-странице. NET (4.0), чтобы отображались события, которые являются предстоящими AS C (сначала отображаются ближайшие в будущем), за которыми следуют события в прошлом, показывающие их DES C в едином списке, который пропускается, чтобы перейти на «страницу» результатов.
Вот так:
- Событие 1 - завтра
- Событие 2 - через неделю
- Событие 3 - через месяц
- Событие 4 - вчера
- Событие 5 - неделя a go
- Событие 6 - месяц a go
Выполняется захват текущей функции список и выполняет сортировку, пропуск и берет (одну страницу):
// Currently this creates a single list order by date desc
var numToLoad = 20;
var list = _context.AllItems.Where(i => i.typeTitle == source);
var items = list.OrderByDescending(i => i.dateCreated).Skip((pageNum - 1) * numToLoad).Take(numToLoad);
Я попытался создать два списка, упорядочив каждый соответствующим образом, а затем объединить их, но тогда я не могу пропустить , поскольку для этого требуется отсортированный список.
// We need a single list but with upcoming dates first, ascending, then past dates descending
var dateNow = DateTime.Now;
var listFuture = _context.AllItems.Where(i => i.typeTitle == source && i.dateCreated >= dateNow).OrderBy(i => i.dateCreated);
var listPast = _context.AllItems.Where(i => i.typeTitle == source && i.dateCreated < dateNow).OrderByDescending(i => i.dateCreated);
var listAll = listFuture.Concat(listPast);
var itemsAll = listAll.Skip((pageNum - 1) * numToLoad).Take(numToLoad); // <-- this gives an error as it's not sorted
Так что мне не нужно переписывать весь код, который обрабатывает возвращенный список (разбивка на страницы и c). Я бы очень хотел иметь возможность вернуть один список из функции!
Я действительно видел, что можно было бы выполнить условную сортировку, а затем пропустить и взять один linq, но я просто не могу заставить что-то подобное работать.
Есть идеи?