使用LINQ获取当前记录的前一条记录

8
如果我有一个项目列表,并且说“id”是唯一的,但不一定是连续的,是否有办法在List或IEnumerable中找到先前的实体?
所以我可能有一个人员列表,他们每个人都有一个id,并且按照我不知道的顺序进行排序。我得到的只是列表和人员的id。
现在我需要获取提供给我的id之前的人员。
是否有一种很好的LINQ方法来做到这一点,或者我只需在ForEach中找到记录并获取前一个记录?
编辑 我刚刚发现了这个,这是最好的方法吗?
1个回答

18

我认为你需要这个

 items.TakeWhile(x => x.id != id).LastOrDefault();
  • Enumerable.TakeWhile方法按照指定的条件返回序列中满足条件的元素,然后跳过剩余的元素。
  • 我们从其中取default或最后一个元素。

这假设项目是有序的,但根据问题描述,它们并不是有序的。 - Ant P
实际上这个代码是可行的,因为我使用了 items.TakeWhile(x => x.id != id).LastOrDefault(); 这段代码来选择前一个记录。 - griegs
好的。 (除了将其更改为griegs上面给出的形式之外)@AntP不,它没有。也许你误解了问题。 - Jim Balter
我认为OP的意思是它们没有被排序或者这个集合不是连续的,所以你不能停在比“当前”少一个ID的项目上。这个解决方案是可行的。 - Tormod
嗯,看起来我误解了问题,但是“我需要获取之前的人到提供给我的ID”有点模糊不清。 - Ant P
它没有成功,但我认为不是因为你的解决方案有问题。我认为这与我所得到的列表有关。所以加一并标记为正确答案,因为我认为它在技术上是正确的。谢谢。 - griegs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接