Найдите следующую запись в наборе: LINQ
У меня есть список объектов, все из которых имеют свойство id
например
1, 10, 25, 30, 4
У меня есть currentId, и мне нужно найти следующий идентификатор в списке
Итак, для текущего идентификатора установлено значение 25, мне нужно вернуть объект с идентификатором 30. После этого будет 4.
Как мне сделать это элегантно в LINQ?
ИЗМЕНИТЬ
Список упорядочивается свойством sort. Таким образом, вы не можете просто заказать по id, так как это испортит порядок.
Ответы
Ответ 1
Без переупорядочения (обратите внимание, что я немного изменяю, поскольку, как я думаю, неправильно понял вопрос):
int[] data = {1, 10, 25, 30, 4};
int last = 25;
var next = data.SkipWhile(i => i != last).Skip(1).First();
Очевидно, если data
был набором объектов, то вроде:
var next = data.SkipWhile(obj => obj.Id != last).Skip(1).First();
Ответ 2
int currentId = 25;
var next = yourCollection.Where(i => i.Id > currentId).OrderBy(i => i.Id).First();
Ответ 3
Существует довольно много решений. Я предлагаю что-то вроде следующего.
var next = items
.Where(item => item.Id > currentId)
.OrderBy(item => item.Id)
.First();
var next = items
.OrderBy(item => item.Id)
.First(item => item.Id > currentId);
Если вы хотите, чтобы идентификаторы в порядке, которые они отображали в коллекции, вы могли бы использовать следующее.
var next = items
.SkipWhile(item => item.Id != currentId)
.Skip(1)
.FirstOrDefault();
Если это возвращает null
, вы попытались получить следующий элемент последнего элемента.