c#查询重叠日期

c#查询重叠日期,c#,winforms,linq,C#,Winforms,Linq,我想检查一下这个房间是否已经预订了: bool overlaps = false; 这种方法仅查找值为5的第一个

我想检查一下这个房间是否已经预订了:

bool overlaps = false;
这种方法仅查找值为
5
第一个
,因为它是
FirstOrDefault()

问题:

如何检查值为5的每个
,然后防止同一房间中的日期重叠

我尝试了以下方法,但有时不起作用

foreach(var item in room)
{
  if((StartDateWantToBook <= item.EndDate) && (item.StartDate <= EndDateWantToBook))
  {
       overlaps = true;
       MessageBox.Show("This room is already reserved");
  }
  else
  {
      // Process to reserv this room
      overlaps = false;
  }
foreach(房间中的var项目)
{

如果((StartDateWantBook该
else
块将
重叠设置为
false
。即使存在重叠保留,如果它处理的最后一个保留不重叠,它也将设置为
false
。摆脱
else
块。

else
块将
重叠设置为
false
>。即使存在重叠保留,如果它处理的最后一个保留不重叠,它也会被设置为
false
。请清除
else
块。

首先,请更改代码以提高可读性

bool overlaps = false;
foreach(var item in room)
{
  if((StartDateWantToBook <= item.EndDate) && ( EndDateWantToBook >= item.StartDate))
     {
        overlaps = true;
        MessageBox.Show("This room is already reserved");
        // or you could use break; here to exist 
     }
}
// you could continue here by checking if(overlaps)
bool overlaps=false;
foreach(房间中的var项目)
{
如果((StartDateWantBook=item.StartDate))
{
重叠=真;
MessageBox.Show(“此房间已预订”);
//或者你可以用break;在这里生存
}
}
//您可以通过检查是否(重叠)继续此处

通过使用此选项,您可以删除else块以减少一些编码行。

首先,请更改代码以提高可读性

bool overlaps = false;
foreach(var item in room)
{
  if((StartDateWantToBook <= item.EndDate) && ( EndDateWantToBook >= item.StartDate))
     {
        overlaps = true;
        MessageBox.Show("This room is already reserved");
        // or you could use break; here to exist 
     }
}
// you could continue here by checking if(overlaps)
bool overlaps=false;
foreach(房间中的var项目)
{
如果((StartDateWantBook=item.StartDate))
{
重叠=真;
MessageBox.Show(“此房间已预订”);
//或者你可以用break;在这里生存
}
}
//您可以通过检查是否(重叠)继续此处

通过使用此选项,您可以删除else块以减少一些代码行。

谢谢您的回答。您是指在FirstDefault()还是Tolist()中如果没有预订房间,那么如何处理预订?它不在else块中吗?在
foreach
循环中。此外,一旦您找到一个重叠的房间,您可以
从循环中中断;
,因为找到任何不重叠的预订都不会改变您找到一个房间的事实。再次感谢您,但我想继续如果这个房间没有预订?请输入预订代码。您认为在foreach和预订同一房间的同一天之后会继续吗?如果没有预订怎么继续?这就是为什么我认为我需要其他块…谢谢您的回复。您是指在FirstDefault()还是Tolist()中如果没有预订房间,那么如何处理预订?它不在else块中吗?在
foreach
循环中。此外,一旦您找到一个重叠的房间,您可以
从循环中中断;
,因为找到任何不重叠的预订都不会改变您找到一个房间的事实。再次感谢您,但我想继续如果这个房间没有预订?请输入预订代码。您认为在foreach之后,在同一个房间预订相同的日期后继续。如果没有预订,该如何继续?这就是为什么我认为我需要其他功能块…谢谢您的回复,但是如果这个房间没有预订,该在哪里继续?如果没有预订,请告诉我nt预订。那么从哪里开始预订?在哪里放置预订代码。我认为在foreach和在同一房间预订同一天之后,预订将继续。如果没有预订,如何继续?这就是为什么我认为我需要其他阻止…你可以在foreach循环之外看到我的评论??你可以检查是否(重叠)然后执行其余的procress。对吗?我在foreach if(!overlaps){MessageBox.Show(“Hello”)}之后执行了它;但是没有动作。我无法让MessegeBox显示。谢谢。我在按钮功能中移动了bool overlaps=false;。它是在开始的av表单中。但是现在它工作了。谢谢你的回复,但是如果这个房间没有预订,我想预订。那么从哪里开始预订呢?W在这里输入预订代码。我想在foreach之后,在同一个房间里预订相同的日子会继续。如果没有预订,如何继续?这就是为什么我认为我需要其他阻止…你可以在foreach循环之外看到我的评论??你可以检查是否(重叠)并进行剩余的处理。对吗?我在foreach之后做了,如果(!overlaps){MessageBox.Show(“Hello”)};但是没有任何操作。我无法让MessegeBox显示。谢谢。我将bool overlaps=false;移到了我的按钮函数中。它是在开始的av表单中。但现在它运行良好
bool overlaps = false;
foreach(var item in room)
{
  if((StartDateWantToBook <= item.EndDate) && ( EndDateWantToBook >= item.StartDate))
     {
        overlaps = true;
        MessageBox.Show("This room is already reserved");
        // or you could use break; here to exist 
     }
}
// you could continue here by checking if(overlaps)