//目前起始時間是否大於目前終止時間
if (!(start >= end))
{
var tempDate = start.ToShortDateString();
//目前的起始時間到終止期間有連續多天欲預約
//ex:2014/03/26 10:00~2014/03/27 10:00
if(start.ToShortDateString()!=end.ToShortDateString())
{
var tempStart = start;
// 一天一天的比對
while (tempStart <= end)
{
var tempSource = call funcion(tempStart.ToShortDateString());//資料庫已預約完成某一天的資料
if (tempSource.Count() > 0)
{
//時分秒是否衝突
var queryCount = tempSource.Any(s => s.StartDate < end && s.EndDate > tempStart);
if (queryCount && !result) { result = true; msg = "預約時段衝突"; break; }
//完全相同---為安全確保而多寫的
queryCount = tempSource.Any(s => s.StartDate == start && s.EndDate == tempStart);
if (queryCount && !result) { result = true; msg = "預約時段衝突"; break; }
}
tempStart = tempStart.AddDays(1);
}
}
//目前起始時間小於當下
else if (start < now)
{
result = true;//起始日小於現在
msg = "預約時間已過期, 請更改預約時間";
}
//目前結束時間小於當下
else if(end <now)
{
result = true;//結束時間小於當下
msg = "預約時間已過期, 請更改預約時間";
}
else
{
//目前的起始時間到終止期間有同一日時間區間預約
//ex:2014/03/26 10:00~2014/03/26 18:00
var source =call funcion();//資料庫已預約完成的全部資料
if (source.Count() > 0)
{
var queryCount = source.Any(s => s.StartDate < end && s.EndDate > start);
if (queryCount && !result) { result = true; msg = "預約時段衝突"; }
//完全相同
queryCount = source.Any(s => s.StartDate == start && s.EndDate == start);
if (queryCount && !result) { result = true; msg = "預約時段衝突"; }
}
}
}
else{
result = true;//起始大於終止
msg = "開始時間不可大於結束時間";
}
}
else
{
result = true;
msg = "預約資訊異常-起始日為空、終止日為空、無此設備";
}
參考資料:
http://bibby.be/2008/07/blog-post_10.html