DateTime accumalator LINQ函数

时间:2015-08-06 17:44:59

标签: c# linq

对于我的生活,我无法想到如何用LINQ做到这一点:

for (var i = 0; i <= message.RoomBookingDto.Length; i++)
{
    timesToCheck.Add(
        i == 0 
            ? message.RoomBookingDto.BookedOn.AddHours(1) 
            : timesToCheck[i - 1].AddHours(1));
}

因此Length是预订Room的小时数。 BookedOn是预订的日期和时间。

基本上我想要的是,如果长度是3(小时)并且他们在06-08-2015 18:00上预订,我想要生成一个列表:

List<DateTime> 
   {
      "06-08-2015 19:00",
      "06-08-2015 20:00",
      "06-08-2015 21:00"
   }

3 个答案:

答案 0 :(得分:2)

您可以从Enumerable.Range开始构建序列,然后使用Select处理该序列:

var timesToCheck = Enumerable.Range(1, message.RoomBookingDto.Length)
    .Select(i => message.RoomBookingDto.BookedOn.AddHours(i))
    .ToList();

答案 1 :(得分:2)

除非我错过了一些微妙的东西,否则你可以使用Select过载,它也会为选择器提供一个索引参数:

timesToCheck = message.RoomBookingDto.Select((x,i) => 
    message.RoomBookingDto.BookedOn.AddHours(i+1)).ToList();

答案 2 :(得分:1)

不确定LINQ是否就是答案。有一个更好的简化。我相信这段代码也是一样的。

for (var i = 0; i <= message.RoomBookingDto.Length; i++)
{
    timesToCheck.Add(message.RoomBookingDto.BookedOn.AddHours(i));
}

基本上使用AddHours(i)简化操作。 也许你还想在一个tmp变量中存储message.RoomBookingDto.BookedOn,以便每次循环都保存在该查找中。