#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, которое я бы добавил. Это свойство содержит все доступные слоты для врача.