Извлекать определенные данные из списка в asp.net

#c# #asp.net #asp.net-mvc-5

#c# #asp.net #asp.net-mvc-5

Вопрос:

В моей таблице doctor у меня есть 3 столбца с именами время начала, время окончания и продолжительность.

Мой план заключается в том, что когда пользователь вводит название города, выбирает специализацию врача и нажимает кнопку поиска, будет показана таблица врачей, соответствующих этим критериям. Включая время начала, время окончания и временной интервал.

Если у врача время начала в 8 утра и время окончания в 8 вечера и продолжительность в среднем 30 минут для каждого пациента, то будет создано 24 слота.

У меня работает большинство вещей, за исключением того, что я не могу понять, как объединить все с выпадающим списком временных интервалов (который, конечно, не будет показывать уже забронированное время в определенный день).

Теперь у меня уже есть сведения о враче (включая время начала и окончания) в деталях переменной, поэтому я должен иметь возможность извлекать время начала и время окончания оттуда, верно?

И отправить эти две части данных в класс slots.cs для создания слотов?

Это мой метод действий:

 public ActionResult Dashboard(string city, string specialization)
{
    // ?City=Dhakaamp;specialization=Medicineamp;date=2020-11-29amp;btn_find=Find ---> example query string
    string city_local           = Request.Params["city"];
    string specialization_local = Request.Params["specialization"];

    var details = db.doctors
                    .Where(x => x.city.Equals(city_local) amp;amp; 
                                x.specialization.Equals(specialization_local)).ToList();        -->this guy right here 
    return View(details);
}
 

Это мое мнение:

 <table class="table table table-borderless table-hover text-center">
    <thead>
        <tr>
            <th>ID</th>
            <th>Name</th>
            <th>Start Time</th>
            <th>End Time</th>
            <th>Available Slot</th>
            <th>Action</th>
        </tr>
    </thead>
    <tbody>
    @if(Model.Count() == 0)
    {
        <tr>
            <td>No Records Found. Try Again</td>
        </tr>
    }
    else
    {
        foreach(var data in Model)
        {
            <tr>
                <td>@data.doctor_id</td>
                <td>@data.doctor_fname</td>
                <td>@data.start_time</td>
                <td>@data.end_time</td>
                <td>A dropdown of slots needed</td>
                <td><a href="#">Book</a></td>
            </tr>         
        }
    }
    </tbody>
</table>
 

И, наконец, приходит мой slots.cs, который должен работать для создания временных интервалов:

 public class slot
{
    public TimeSpan StartTime { get; set; }
    public TimeSpan Duration { get; set; }

    public string DisplayString
    {
        get
        {
            return StartTime.ToString(@"hh:mm")   " - "   (StartTime   Duration).ToString(@"hh:mm");
        }
    }

    public slot(TimeSpan StartTime, TimeSpan Duration)
    {
        this.StartTime = StartTime;
        this.Duration = Duration;
    }

    public List<slot> TimeSlots(TimeSpan start, TimeSpan end, TimeSpan duration)
    {
        List<slot> slots = new List<slot>();

        while (start < end)
        {
            slots.Add(new slot(start, duration));
            start = start   duration;
        }

        return slots;
    }
}
 

Кто-нибудь может помочь разобраться в этом?

Ответ №1:

«Теперь у меня уже есть сведения о враче (включая время начала и окончания) в деталях переменной, поэтому я должен иметь возможность извлекать время начала и время окончания оттуда, верно? И отправить эти два данных в класс slots.cs для создания слотов ??»

—Короткий ответ, да.

Я предполагаю, что эти элементы являются частью объектов в списке.

Копая немного больше: я, вероятно, показываю здесь очевидное…

Я добавил еще несколько деталей вокруг кода. Запрос LINQ, который у вас есть, работает правильно.

* Извините за уродливую инициализацию списка (прокрутка вправо плоха, но компактный код хорош).

 void Main()
{   
    var doctors = new List<Doctor>{
        new Doctor{Name = "Doc1", City = "Memphis", Specialization ="surgery", StartTime = TimeSpan.Parse("06:00:00"), EndTime = TimeSpan.Parse("15:00:00")},
        new Doctor{Name = "Doc2", City = "Memphis", Specialization ="surgery", StartTime = TimeSpan.Parse("08:00"), EndTime = TimeSpan.Parse("17:00")},
        new Doctor{Name = "Doc3", City = "Nashville", Specialization ="surgery", StartTime = TimeSpan.Parse("10:00"), EndTime = TimeSpan.Parse("14:00")},
        new Doctor{Name = "Doc4", City = "Houston", Specialization ="surgery", StartTime = TimeSpan.Parse("09:00"), EndTime = TimeSpan.Parse("15:00")},
        new Doctor{Name = "Doc5", City = "Memphis", Specialization ="Quack", StartTime = TimeSpan.Parse("08:30"), EndTime = TimeSpan.Parse("15:00")},
    };
            
    // ?City=Dhakaamp;specialization=Medicineamp;date=2020-11-29amp;btn_find=Find ---> example query string
    string city_local = "Memphis";
    string specialization_local = "surgery";
    
    List<Doctor> details = doctors.Where(x => x.City.Equals(city_local) amp;amp; 
    x.Specialization.Equals(specialization_local)).ToList();
    
    ;
    //for breakpoint :)
    //Do something with the list of Doctor (use start times and end times as needed).
}

public class Doctor
{
    public string Name {get; set;}
    public string City {get; set;}
    public string Specialization {get; set;}
    public TimeSpan StartTime {get; set;}
    public TimeSpan EndTime {get; set;}
}

 

Ответ №2:

Надеюсь, я правильно понял ваш вопрос, если нет, пожалуйста, уточните. Я полагаю, вам может понадобиться что-то вроде этого:

 @Html.DropDownListFor(d=>d.AvailableSlots, new SelectList(d.AvailableSlots),"Select Slot");
 

Это было бы на ваш взгляд, где написано «Выпадающий список необходимых слотов». Вы не опубликовали свою модель («доктор»?) но мой код извлекает свойство «AvailableSlots» из модели doctor, которое я бы добавил. Это свойство содержит все доступные слоты для врача.