Я хорошо и действительно застрял по какой-то причине. У меня есть набор XML с помощью linq, который я настроил так, чтобы он подходил под мои объекты DTO, это прекрасно работает, но мне нужен дополнительный фильтр, который возвращает только те типы комнат, которые имеют комнаты с полной доступностью в течение определенного периода.
Теперь мой оригинальный запрос для настройки DTO работает нормально, но я хотел бы добавить что-то, что возвращает только номера, цены на которые доступны на все периоды, так что, если вы хотите забронировать 10 дней, вам нужно только получить номер наберите обратно, у которых есть полные 10 дней. Мой оригинальный запрос следующий:
var items = (
from rt in data.Descendants("RoomType")
select new RoomType
{
name = rt.Descendants("RoomDescription").Descendants("Text").SingleOrDefault().Value,
rooms = (
from r in rt.Descendants("Room")
select new Room
{
Name = r.Attribute("id").Value,
rates = (
from rr in r.Descendants("RoomRate")
where DateTime.Parse(rr.Attribute("EffectiveDate").Value) >= startDate
where DateTime.Parse(rr.Attribute("EffectiveDate").Value) <= endDate
select new RoomRate
{
EffectiveDate = DateTime.Parse(rr.Attribute("EffectiveDate").Value)
})
})
});
если вообще возможно иметь ограничение в этом запросе, это было бы удивительно, но я не мог понять, как это сделать.
Когда я пытался создать еще один запрос на его основе, я не знал, как можно запросить счетчик Rooms.RoomRates из объекта RoomType для возврата. я пытался
var result = items.Where(i => i.rooms.Where(r => r.rates.Count() == 10));
но это дает мне исключение, когда он не может конвертировать IEnumerable в bool, .Any () компилирует, но возвращает все (как, вероятно, и ожидалось).
Кто-нибудь знает, что я здесь не так делаю?
РЕДАКТИРОВАТЬ: ** это то, как он вытягивает данные в данный момент
Тип номера: Одноместный
- Номер 1 (10 дней)
- Номер 2 (10 дней)
Тип номера: Твин
- Номер 3 (10 дней)
- Номер 4 (4 дня)
я пытаюсь исключить возвращение комнаты 4, поскольку она не соответствует критериям дня
так что я должен получить обратно:
Тип номера: одноместный
- Номер 1 (10 дней)
- Номер 2 (10 дней)
Тип комнаты: Твин
- Номер 3 (10 дней)
Надеюсь, это немного прояснит
Спасибо