我创建了一个for each
循环,在此我检查预定是否在特定滑雪板上保留,以及DateTime.Now
是否在预订日期之内。如果是,则IsReserved
属性设置为true
。
这很完美,所以我可以保留一个项目。现在我正在弄清楚如果保留被删除,如何处理这种情况。我想在特定项目上将IsReserved
属性设置为false
,如果其中的预订已被删除。
这是循环
foreach (Ski s in skies)
{
foreach (Reservation r in reservations)
{
var datumdo1 = r.DateTo;
var datumdo2 = datumdo1.ToShortDateString();
var datumted1 = DateTime.Now;
var datumted2 = datumted1.ToShortDateString();
var datumod1 = r.DateFrom;
var datumod2 = datumod1.ToShortDateString();
if ((s.Id == r.Reserved.Id && (r.DateFrom < DateTime.Now || datumod2 == datumted2)) && (r.DateTo > DateTime.Now || datumdo2 == datumted2) && (r.Reserved.IsReserved == false))
{
s.IsReserved = true;
}
skiDao.update(s);
}
if(reservations.Count == 0)
{
s.IsReserved = false;
}
}
我尝试在第一个条件下添加它:
if(s.Id != r.Reserved.Id)
{
s.IsReserved = false;
}
但是,迭代会在第一次出现时停止。所以它只检查一个预订。如果没有与项目ID相同的ID,如何通过所有预订并设置s.IsReserved = false
?
答案 0 :(得分:0)
试试这个,
foreach (Ski s in skies)
{
var reser = reservations.where(a=>a.ReservedId == s.Id).firstordefault();
if(reser != null) // cheks if no reservation available
{
s.IsReserved = false;
}
else{
// if you need
}
}
答案 1 :(得分:0)
我在这里提出你最初的想法。我认为你的建议在哪里会重置s.IsReserved在第一个不匹配的ID(这可能只是意味着它不是你看到的第一个),而不是它们都不匹配(预订被删除)。你可以这样做。
foreach (Ski s in skies)
{
var skiFound = false;
foreach (Reservation r in reservations)
{
skiFound = skiFound || (s.Id == r.Reserved.Id);
var datumdo1 = r.DateTo;
var datumdo2 = datumdo1.ToShortDateString();
var datumted1 = DateTime.Now;
var datumted2 = datumted1.ToShortDateString();
var datumod1 = r.DateFrom;
var datumod2 = datumod1.ToShortDateString();
if ((s.Id == r.Reserved.Id && (r.DateFrom < DateTime.Now || datumod2 == datumted2)) && (r.DateTo > DateTime.Now || datumdo2 == datumted2) && (r.Reserved.IsReserved == false))
{
s.IsReserved = true;
}
skiDao.update(s);
}
if (!skiFound)
{
s.IsReserved = false;
}
//now probably no longer needed
if(reservations.Count == 0)
{
s.IsReserved = false;
}
//commenters may well be right that for this change to stick, you need to update the database
}
答案 2 :(得分:-2)
您可以使用LINQ
,而不是预订s.IsReserved = reservations.Any(r => (s.Id == r.Reserved.Id && (r.DateFrom < DateTime.Now || datumod2 == datumted2)) && (r.DateTo > DateTime.Now || datumdo2 == datumted2) && (r.Reserved.IsReserved == false));
这将取代整个循环和最后一个条件。