EF: Включить с предложением где

Как следует из названия, я ищу способ сделать предложение where в сочетании с include.

Вот мои ситуации: я отвечаю за поддержку большого приложения, полного запахов кода. Изменение слишком большого количества кода вызывает ошибки везде, поэтому я ищу самое безопасное решение.

Позволять'скажем, у меня есть объект Bus и объект People (в Bus есть навигационная опора Collection of People). В моем запросе мне нужно выбрать все автобусы только с теми пассажирами, которые не спят. Это упрощенный фиктивный пример

В текущем коде:

var busses = Context.Busses.Where(b=>b.IsDriving == true);
foreach(var bus in busses)
{
   var passengers = Context.People.Where(p=>p.BusId == bus.Id && p.Awake == true);
   foreach(var person in passengers)
   {
       bus.Passengers.Add(person);
   }
}

После этого кода контекст удаляется, и в вызывающем методе результирующие объекты шины отображаются в класс DTO (100% копия объекта).

Этот код вызывает несколько обращений к БД, которая является No-Go, поэтому я нашел это решениеПО MSDN Блоги

Это отлично работало при отладке результата, но когда сущности сопоставляются с DTO (с помощью AutoMapper), я получаю исключение, что Context / Connection был закрыт и что объект может 'не быть загруженным. (Контекст всегда закрытизменить это :()

Поэтому мне нужно убедиться, что выбранные пассажиры уже загружены (свойство IsLoaded для навигации также имеет значение False). Если я осматриваю коллекцию Пассажиров, Граф также выбрасывает Исключение, но в Коллекции Пассажиров также есть коллекция под названием «обернутые связанные объекты » которые содержат мои отфильтрованные объекты.

Есть ли способ загрузить эти обернутые связанные сущности во всю коллекцию? (Я могу't изменить конфигурацию отображения автомпера, потому что она используется во всем приложении).

Есть ли другой способ получить активных пассажиров?

Любая подсказка приветствуется ...

редактировать

Ответ Герта Арнольдане работает, потому что данные незагружен с нетерпением. Но когда я упрощаю это и удаляю, куда это загружено. Это действительно странно, так как в обоих случаях команда execute sql возвращает всех пассажиров. Таким образом, должна быть проблема, когда результаты возвращаются в сущность.

Context.Configuration.LazyLoadingEnabled = false;
var buses = Context.Busses.Where(b => b.IsDriving)
        .Select(b => new 
                     { 
                         b,
                         Passengers = b.Passengers
                     })
        .ToList()
        .Select(x => x.b)
        .ToList();
Edit2

После большой борьбы ответ Герт Арнольд работы! Как предположил Герт Арнольд, вам нужно отключить Lazy Loading и держать его выключенным. Это потребует некоторых дополнительных изменений в приложении, так как предыдущий разработчик любил Lazy Loading -_-

Ответы на вопрос(2)

Ваш ответ на вопрос