C# 查找集合中的下一条记录:LINQ
我有一个对象列表,所有对象都有一个id属性 例如 1,10,25,30,4 我有一个currentId,我需要在列表中找到下一个Id 例如,当前Id设置为25,我需要返回Id为30的对象。之后的一个是4 在LINQ我该如何优雅地做到这一点 编辑C# 查找集合中的下一条记录:LINQ,c#,linq,C#,Linq,我有一个对象列表,所有对象都有一个id属性 例如 1,10,25,30,4 我有一个currentId,我需要在列表中找到下一个Id 例如,当前Id设置为25,我需要返回Id为30的对象。之后的一个是4 在LINQ我该如何优雅地做到这一点 编辑 列表按“排序”属性排序。因此,您不能只按id订购,因为那样会打乱订单。有很多解决方案。我建议如下 int currentId = 25; var next = yourCollection.Where(i => i.Id > currentI
列表按“排序”属性排序。因此,您不能只按id订购,因为那样会打乱订单。有很多解决方案。我建议如下
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);
var next = items
.SkipWhile(item => item.Id != currentId)
.Skip(1)
.FirstOrDefault();
如果希望ID按其在集合中的显示顺序排列,可以使用以下命令
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
,则表示您已尝试获取最后一个项目的下一个项目。而无需重新排序(注意,我略作编辑,因为我认为我误读了问题):
显然,如果data
是一组对象,比如:
var next = data.SkipWhile(obj => obj.Id != last).Skip(1).First();
如果您只想得到一个对象,为什么不重新排序查询?另外,如果这到达列表的末尾并试图跳过,它会抛出异常还是只返回null。我需要检查这个吗?目前,它会抛出-但您可以使用
FirstOrDefault
,它不会抛出。