方法返回未预订约会的DateTime列表

本文关键字:DateTime 列表 约会 返回 方法 | 更新日期: 2023-09-27 17:58:09

我正在为客户创建一个预约网站。所以我试图返回一份免费预订的约会列表,目标是,如果已经预订了,你就无法预订时间。

我的第一个方法(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;
    }

方法返回未预订约会的DateTime列表

我只是在想,但你可以这样做检查。

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;
    }
}