对于我的生活,我无法想到如何用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"
}
答案 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,以便每次循环都保存在该查找中。