我正在为客户创建一个预约网站。所以我试图返回一份免费预订的约会列表,目标是,如果已经预订了,你就无法预订时间。
我的第一个方法(public List AllTimes)返回所选日期的所有bookabe约会时间的列表,即使是已经预订的时间。所以它会返回一个列表,这样你就可以每15分钟在一张桌子上选择一个时间。每个表单元格的开始取决于您选择的应用程序类型(int behandlingslangd)。因此,如果选择的约会长度为60分钟,则返回的列表可能如下所示:
上午8点至9点
8.15-9.15
8.30-9.30
8.45-9.45
9.00-10.00
9.15-10.15
9时30分至10时30分
9.45-10.45
到目前为止,一切都很好!但使用我的第二种方法(public List NonBookedTimes),我试图返回一个只包含免费预约的列表。你将无法预约已经预约的预约。在我的第二种方法中,我的if语句几乎达到了我想要做的事情。例如:如果一个约会已经预订了9.15,那么我表中的时间已经被删除。但是之前的两次,以及女巫重叠之后的两次仍然在我的表中,所以我不知道还需要在我的if语句中添加什么来解决这个问题。所以我的目标是我希望我的桌子看起来像这样(如果选择的时间是60分钟):
上午8点至9点
8.15-9.15
10.15-11.15
上午10:30-11:30
public List<DateTime> AllTimes(int behandlingsLangd, List<Bokningstider> oppetTider, DateTime datum)
{
List<DateTime> _myList = new List<DateTime>();
foreach (var item in oppetTider)
{
var startTid = new DateTime(datum.Year, datum.Month, datum.Day, item.StartTidTimme, item.StartTidMinut, 00);
var SlutTid = new DateTime(datum.Year, datum.Month,datum.Day, item.SlutTidTimme, item.SlutTidMinut, 00);
for (DateTime i = startTid; i.AddMinutes(behandlingsLangd) <= SlutTid; i = i.AddMinutes(15))
{
_myList.Add(i);
}
}
return _myList;
}
public List<DateTime> NonBookedTimes(List<DateTime> AllTimes, DateTime datum, int? behandlingsId)
{
ApplicationDbContext _db = new ApplicationDbContext();
var query = from a in _db.AppointmentDiary
where a.DateTimeScheduled.Year == datum.Year
&& a.DateTimeScheduled.Month == datum.Month
&& a.DateTimeScheduled.Day == datum.Day
select a.DateTimeScheduled;
var bokningsTider = _db.BokningsTider;
AppointmentDiary rec = new AppointmentDiary();
List<DateTime> tider = new List<DateTime>();
foreach (var Tid in AllTimes)
{
tider.Add(Tid);
foreach (var item in query)
{
if (item <= Tid) // ---------- Here I think I need to extend my if-statment
{
tider.Remove(Tid);
}
}
}
return tider;
}
我只是在想,但你可以这样做检查。
List<Datetime> ledige_Timer = AllTimes.Where(a=> !query.Contain(a)).toList();
您可以选择查询中不存在的所有时间。
对于代码的结构和规划,我会做很多不同的事情。但作为权宜之计,我认为这会奏效。
我要做的是创建一个约会类,然后有一个约会类别列表。
请记住,这只是一个建议,以减轻未来工作的负担。类可以是包含bool、userID、开始时间和时间跨度的DB表,其工作方式相同。
class planner{
List<Appointment> Appointments = new List<Appointment>();
void initDay(){
Datetime baseTime = new Datetime(8,0,0);//8 o'clock
for(int a = 0; a<8; a++){
Appointments.Add(new Appointment(new Datetime(H,M,0),new Timespan(1,0,0)));
baseTime.Add(new timespan(0,15,0)); //Add 15 minutes
}
//Now you have a list of appointents where you can ask for all openings
//of all appointments by simply asking
var UnFilled = Appointments.Where(a=>!a.isFilled());
var Filled = Appointments.Where(a=>a.isFilled());
}
}
public class Appointment{
User filled = null;
Datetime start;
Timespan time;// Makes for adjustable time span
public Appointment(Datetime Start, Timespan Time){
start = Start;
time = Time;
}
public void fillAppointment(User Fill){
filled = Fill;
}
public bool isFilled(){
return filled != null? true:false;
}
}