Я думаю, что я официально схожу с ума :) У меня было кое-что, работающее с Linq для XML, но из-за проблем со скоростью мне пришлось переделывать и преобразовывать данные, чтобы поместить их в БД.Сейчас я переделываю свой сантехнический код, чтобы учесть Linq2Sql, но метод, запрашивающий возвращенные результаты метода, который работал с провайдером XML, просто не хочет работать сейчас?
ОБНОВЛЕНИЕ
Я обнаружил, что мое консольное приложение, которое я использую для отображения результатов, делает некоторые забавные вещи.Например, если я вызываю методы в следующем порядке:
var available = manager.DoesHotelHaveAvailabilityForPeriod("BTHA", start, end, 10);
var results = manager.GetRoomTypesForPeriod("BTHA", start, end);
Доступность работает, но getRoomTypes не возвращает roomTypes, если я меняю их местами, происходит обратное, возвращаются типы комнат, но затем возвращается доступностьfalse, так вот почему я получаю странные результаты, я просто не знаю, почему это произойдет?
Например, мой репозиторий возвращает это:
public LinqAvailabilityRepository()
{
var context = new AvailabilityDataContext();
_typesTable = context.GetTable<RoomType>();
}
мой верхний уровеньвызов метода делает это
public List<RoomType> GetRoomTypes(string hotelCode)
{
var results = from rt in _repository.RoomTypes
where rt.Rooms.Any(r => r.HotelCode == hotelCode)
select rt;
return results.ToList();
}
это работает, когда я выводю его на экран в консоли
public List<RoomType> GetRoomAvailability(string hotelCode, DateTime startDate, DateTime endDate, int daysRequired)
{
var items = GetRoomTypes(hotelCode);
var results = items.Select(rt =>
new RoomType
{
id = rt.id,
Code = rt.Code,
Description = rt.Description,
Name = rt.Name,
Rooms = rt.Rooms.Select(r =>
new Room
{
id = r.id,
RoomRates = r.RoomRates.Where(rr => rr.EffectiveDate >= startDate &&
rr.EffectiveDate <= endDate).ToEntitySet()
})
.Where(r => r.RoomRates.Count == daysRequired)
.OrderByDescending(r => r.RoomRates.Count()).ToEntitySet()
});
return results.ToList();
}
Но когда я вызываю следующее, коллекция комнат равна 0, но я знаючто метод возвращает комнаты на основе того же запроса, который я выводил ранее, когда я напрямую вызываю метод выше.
public bool DoesHotelHaveAvailabilityForPeriod(string hotelCode, DateTime startDate, DateTime endDate, int daysRequired)
{
var items = GetRoomAvailability(hotelCode, startDate, endDate, daysRequired).ToList();
return ((from i in items
where i.Rooms.Count == daysRequired
select i).Count() > 0);
}
это также происходит для пары других методов, где другие объекты не возвращаются при попыткеи подзапрос, как это, я пытаюсь не повторять себя с тем же кодом, есть что-то, что я должен знать или не делаю?
Любая помощьв понимании это будет с благодарностью.
Роб