2014-04-12 53 views
0

我正在爲客戶預約網站。因此,我正在嘗試返回一份免費預訂約會列表,目標是,如果預訂時間已滿,您將無法預訂時間。返回非預約日期時間列表的方法

我的第一種方法(公共列表所有時間)返回一個選定日期的所有圖書館預約時間列表,即使是已預訂的預訂時間列表。所以它會返回一個列表,所以你可以每隔15分鐘選一個表格。根據您選擇的女巫類型,每個表格單元格都會啓動(int behandlingslangd)。因此,在返回的列表可以是這個樣子,如果已選定約會-lenght例如是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,那我的表中的那個時間已經被刪除了。但是之前的兩次,以及女巫重疊之後的時間仍然存在於我的表格中,所以我無法弄清楚爲了解決這個問題我還需要添加哪些內容。 所以我的目標是,我希望我的表看起來像這樣(如果已選定的時間是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

嗯,我只是想在這裏,但你可以做這樣的檢查。

List<Datetime> ledige_Timer = AllTimes.Where(a=> !query.Contain(a)).toList(); 

您選擇查詢中不存在的所有時間。

與代碼的結構和規劃有很大不同。但作爲一個快速解決方案,我認爲這將起作用。

我會做的是創建一個約會類,然後有一個約會類的列表。

請記住,這只是一個建議,以減輕未來工作的負擔。該類可以是包含一個bool,一個用戶ID,啓動時間和時間跨度的數據庫表,它將以相同的方式工作。

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; 
    } 
} 
相關問題