我正在建立一个网站供客户预约。因此,我正在尝试返回免费预订约会列表,目标是,如果已经预订,您将无法预订时间。
我的第一个方法(公共列表AllTimes)返回一个选择日的所有bookabe预约时间的列表,甚至是预订的alredy。所以它返回一个列表,这样你就可以每隔15分钟选一次表。每个表格单元格都取决于您选择的女巫类型(int behandlingslangd)。因此,如果选择的约会长度为60分钟,则返回的列表可能看起来像这样:
8.00 - 9.00
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
到目前为止,一切都很好! 但是我的第二种方法(公共列表NonBookedTimes)我试图返回一个只是免费约会的列表。你无法预约预约的预约。我的第二种方法中的if语句几乎实现了我想要做的事情。例如:如果预约已经预订9.15,那么我的表格中的时间已被删除。但是之前的2次,以及巫婆重叠之后的时间仍然存在于我的桌子中,所以我无法弄清楚还有什么可以添加到我的if-statment来解决这个问题。 所以我的目标是我希望我的桌子看起来像这样(如果选择的时间是60分钟):
8.00 - 9.00
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;
}
答案 0 :(得分:0)
我只是想在这里,但你可以像这样做。
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;
}
}