Это, кажется, испортилось. Предполагается, что CarVM представляет собой автомобиль, и в этом случае можно предположить, что у него также есть список диапазонов дат, когда этот автомобиль уже забронирован (недоступен), но то, что вы делаете, - это наличие одного CarVM, который представляет собой данные автомобиля и затем куча других CarVM, которые просто указывают даты, когда машина забронирована. Сделайте вашу жизнь проще, имейте класс, у которого есть пара дат для начальной и конечной даты - назовем его DateRange, у CarVM есть;
List<DateRange> BookedDates = new List<DateRange>();
Заполните это из вашей базы данных вместо того, чтобы делать несколько новый CarVM с зарегистрированными датами, и тогда у вас будет единая единая модель данных для автомобиля и его бронирований
class DateRange{
public DateTime StartDate{get;set;}
public DateTime EndDate{get;set;}
public bool Overlaps(DateTime qStart, DateTime qEnd){
//a queried date range is only safe if it starts after this
//range ends or it ends before this range starts.
//anything else is an overlap
return !(qStart > EndDate || qEnd < StartDate);
}
}
Это означает, что вы можете взять свой список CarVM и выяснить, какие из них доступны с :
carVMs.Where(c => !c.BookedDates.Any(dr => dr.Overlaps(userChosenStartDate, userChosenEndDate)));
"Автомобили, на которых не забронированы даты, перекрывают даты, когда пользователь хочет автомобиль"