查找集合中的下一条记录:LINQ

我有一个对象列表,都有一个id属性

例如

1,10,25,30,4

我有一个currentId,我需要在列表中找到下一个Id

因此,例如当前Id设置为25,我需要返回id为30的对象。之后的那个将是4。

我如何在LINQ中优雅地完成这项工作?

编辑

该列表按“sort”属性排序。 因此,您不能只按ID排序,因为这会弄乱订单。

没有重新排序(注意我稍微编辑,因为我认为我误读了这个问题):

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(); 
 int currentId = 25; var next = yourCollection.Where(i => i.Id > currentId).OrderBy(i => i.Id).First(); 

有很多解决方案。 我建议如下。

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

如果您希望ID按照它们出现在集合中的顺序,您可以使用以下内容。

 var next = items .SkipWhile(item => item.Id != currentId) .Skip(1) .FirstOrDefault(); 

如果返回null ,则表示您已尝试获取最后一项的下一项。