You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Linq获取Offer列表中的当前项与对应上一项?

用Linq获取列表中每个项的上一项

嘿,针对你给出的Offer类和实例列表,我给你两种实用的Linq实现方式,轻松拿到每个当前项对应的上一项:

首先先回顾下你的基础代码:

public class Offer {
    public int OfferID { get; set; }
    public DateTime OfferDate { get; set; }
    public int CustomerID { get; set; }
}

List<Offer> oList = new List<Offer>();
oList.Add(new Offer() { OfferID = 1, OfferDate = new DateTime(2018, 01, 01), CustomerID = 1 });
oList.Add(new Offer() { OfferID = 2, OfferDate = new DateTime(2018, 01, 03), CustomerID = 1 });
// 这里假设你后续还有其他Offer实例...

方法一:利用Select的索引重载(适合List这类支持快速索引的集合)

因为List<T>支持O(1)的索引访问,我们可以直接用Select的带索引参数的重载,判断当前项的位置,取前一个索引的元素:

var result = oList.Select((currentOffer, index) => new {
    Current = currentOffer,
    Previous = index > 0 ? oList[index - 1] : null // 第一个项没有上一项,返回null
});

这个方法简单直接,对于List来说效率很高,毕竟索引访问没有额外开销。

方法二:使用Zip+Prepend(通用所有IEnumerable集合)

如果你的集合不是List,而是其他不支持快速索引的IEnumerable<T>,可以用Zip方法结合Prepend来实现,这种方式更通用:

// 在原列表前面添加一个null,然后和原列表配对
var result = oList.Zip(oList.Prepend((Offer)null), (current, previous) => new {
    Current = current,
    Previous = previous
});

Prepend会在原序列的最前面插入一个null,然后Zip会把两个序列的对应元素一一配对:

  • 原列表第一个元素 ↔ 插入的null(没有上一项)
  • 原列表第二个元素 ↔ 原列表第一个元素
  • 以此类推,正好对应每个项的上一项

你可以根据自己的集合类型和需求选择合适的方法,两种方式都能得到包含当前项和对应上一项的匿名对象序列~

内容的提问来源于stack exchange,提问作者Impostor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:34:04