访问列表中的两个索引,并使用 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方法来实现这一点?
如果你的结果是 {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();