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

时间:2016-02-18 22:43:49

标签: c# linq datetime

我有一个这样的DateTime对象列表,它们的间隔为15分钟

11:15 AM 上午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; }

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

StartTime - 上午11:15 结束 - 上午11:30

StartTime - 上午11:30 结束 - 上午11:45

Linq是否有实现这一目标的方法?

2 个答案:

答案 0 :(得分:1)

如果您的结果是{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]

会更简洁

答案 1 :(得分:0)

假设这是你的班级:

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)));

这是你的初始名单:

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

LINQ代码是:

currentpos = transform.eulerAngles + new Vector3 (0, 90, 0);