Найдите следующую запись в наборе: 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, вы попытались получить следующий элемент последнего элемента.