这是我的时间表代码的一部分
两个问题:
如何避免循环遍历时间和房间预订以检查它是否存在于给定的时间段内。有没有一种方法可以只说“这次,这个列表中是否有匹配项,它的 ID 是什么”
我是否可以将外部 td 设置为类 bgred,而不是跨度。 (请注意,一个时间段内可能有多个预订,因此将 td 排除在 foreach 循环之外。)
<tr>
<th></th>
@for (int i = 9; i <= 17; i++)
{
<th>@i:00</th>
}
</tr>
@foreach (var RoomNo in ViewBag.Rooms)
{
<tr>
<th>@RoomNo</th>
@for (int i = 9; i <= 17; i++)
{
<td>
@foreach (var roombooking in ViewBag.RoomBookings)
{
DateTime DateCheckStart = DateTime.Parse(ViewBag.Date.ToShortDateString() + " " + i.ToString() + ":00");
DateTime DateCheckEnd = DateTime.Parse(ViewBag.Date.ToShortDateString() + " " + i.ToString() + ":59");
if (DateCheckStart < roombooking.EndDateTime && DateCheckEnd > roombooking.StartDateTime && roombooking.RoomNo == RoomNo)
{
<span class="bgred"> @roombooking.RentalNo</span>
}
}
</td>
}
</tr>
}
最佳答案
像这样的东西怎么样
@foreach (var roombooking in ViewBag.RoomBookings.Where( /* in range */ ))
这样你就可以删除你的第一个 for 循环
关于C#:将 for(each) 循环组合成高效代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8255682/