По сути, я пытаюсь получить список доступных дат для данного Cottage_ID (создание системы бронирования праздников).
Не уверен, что моя логика правильна, но я думаю, есть ли List<DateTime>
всех дат с сегодняшнего дня до последнего дня 2019 года.
Затем я перебираю класс диапазонов дат, заполненных забронированными датами в базе данных, и заполняю новые List
этими; затем создайте третий список, например availableDates = allDays.Except(bookedDates)
.
Проблема в том, что один список List<DateTime>
, а другой - List<DateRange>
, который имеет 2 DateTime
Properties
.
Как перебрать класс dateRange, а затем для каждого диапазона дат сохранить все дни между датой прибытия и отъезда?
Сервисный метод для получения забронированных дат из базы данных
public List<DateRange> GetBookedDates(int id)
{
DateRange dateRange = new DateRange();
DateTime start = Convert.ToDateTime(dateRange.Arrive);
DateTime endDate = Convert.ToDateTime(dateRange.Depart);
SqlConnection conn = new SqlConnection(dataSource);
List<DateRange> bookedDates = new List<DateRange>();
//To avoid sql injections parameters are used so the sql query is not concatinated with user input.
string sqlQueryDeleteBooking = "SELECT Arrive, Depart FROM dbo.Bookings WHERE Cottage_ID=@id";
SqlCommand cmd = new SqlCommand(sqlQueryDeleteBooking, conn);
cmd.Parameters.AddWithValue("@id", id);
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
if (!reader.HasRows)
{
throw new Exception();
}
else
{
bookedDates.Add(new DateRange()
{
Arrive = Convert.ToDateTime(reader["Arrive"]),
Depart = Convert.ToDateTime(reader["Depart"]),
});
for (DateTime dates = start; dates <= endDate; dates = dates.AddDays(1))
{
bookedDates.Add(dates);
}
}
}reader.NextResult();
return bookedDates;
}
Цикл работал для получения списка дней с сегодняшнего дня до 31 декабря, но, очевидно, bookedDates
- это List<DateRange>
не List<DateTime>
Могу ли я привести dates
как тип DateRange
или наоборот?
Сервисный метод для получения всех дней в году
public List<DateTime> GetAvailableDates(int id)
{
DateTime start = DateTime.Today;
string end = "31/12/2019";
DateTime endDate = DateTime.Parse(end);
List<DateTime> allDays = new List<DateTime>();
for (DateTime dates = start; dates <= endDate; dates = dates.AddDays(1))
{
allDays.Add(dates);
}
return allDays;
}
Класс диапазона дат
[DataContract]
public class DateRange
{
[DataMember]
public DateTime Arrive { get; set; }
[DataMember]
public DateTime Depart { get; set; }
}
}
Так что да, идея состоит в том, чтобы убрать все забронированные дни в DateRange
из списка allDays
.
У меня есть List<DateTime> allDays
и List<DateRange> bookedDate
как их использовать вместе?
ТИА!