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

时间:2009-08-26 10:20:31

标签: c# linq

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

E.g

1,10,25,30,4

我有一个currentId,我需要找到列表中的下一个ID

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

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

修改

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

3 个答案:

答案 0 :(得分:34)

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

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

答案 1 :(得分:3)

int currentId = 25;
var next = yourCollection.Where(i => i.Id > currentId).OrderBy(i => i.Id).First();

答案 2 :(得分:2)

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

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,您已尝试获取最后一项的下一项。