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

时间:2014-04-12 00:10:25

标签: c# asp.net-mvc

我正在建立一个网站供客户预约。因此,我正在尝试返回免费预订约会列表,目标是,如果已经预订,您将无法预订时间。

我的第一个方法(公共列表AllTimes)返回一个选择日的所有b​​ookabe预约时间的列表,甚至是预订的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;
    }

1 个答案:

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