访问列表中的两个索引,并使用 Linq 创建新对象列表

本文关键字:列表 Linq 新对象 对象 创建 索引 访问 两个 | 更新日期: 2023-09-27 18:35:14

我有一个这样的日期时间对象列表,它们以 15 分钟的间隔排列

上午11:15上午11:30上午 11:45 等等...

IList<DateTimeOffset> list;

我的班级看起来像这样

/// <summary>Start Time</summary>
[JsonProperty(PropertyName = "startTime")]
public DateTimeOffset StartTime { get; set; }
/// <summary>End Time</summary>
[JsonProperty(PropertyName = "endTime")]
public DateTimeOffset EndTime { get; set; }

我想浏览列表并创建一个结果对象,如下所示:

开始时间 - 上午 11:15结束 - 上午 11:30

开始时间 - 上午 11:30结束 - 上午 11:45

有没有Linq方法来实现这一点?

访问列表中的两个索引,并使用 Linq 创建新对象列表

如果你的结果是 {nth, nth + 1} 列表项的组合,那么你可以做:

        var result = list.Join(list, 
                         x => list.IndexOf(x) + 1, 
                         x => list.IndexOf(x), 
                         (x, y) => new YourClass
                            {
                                StartTime = x,
                                EndTime = y
                            });

但我认为简单地使用 for 循环并获取列表[i],列表[i+1] 会更干净

假设这是你的类:

public class YourClass
{
    public DateTimeOffset StartDate { get; set; }
    public DateTimeOffset EndDate { get; set; }
}

这是您的初始列表:

DateTime first = new DateTime(1, 1, 1, 11, 15, 0);
List<DateTimeOffset> list = new List<DateTimeOffset>();
list.Add(new DateTimeOffset(first));
list.Add(new DateTimeOffset(first.AddMinutes(15)));
list.Add(new DateTimeOffset(first.AddMinutes(30)));

LINQ 代码为:

List<YourClass> newList = (from i in list.Take(list.Count - 1)
                           select new YourClass
                           {
                               StartDate = i,
                               EndDate = list[list.IndexOf(i) + 1]
                           }).ToList();