Я смотрел Применение фильтров при явной загрузке связанных объектов и не мог заставить его работать для отношения "многие ко многим".
Я создал простую модель: 
Краткое описание:
A Student может принимать много Courses, а Course может иметь много Students.
A Student может сделать много Presentation, но a Presentation может быть сделано только одним Student.
Итак, у нас есть отношение "много-ко-многим" между Students и Courses, а также отношение "один ко многим" между Student и Presentations.
Я также добавил один Student, один Course и один Presentation, связанные друг с другом.
Вот код, который я запускаю:
class Program
{
static void Main()
{
using (var context = new SportsModelContainer())
{
context.Configuration.LazyLoadingEnabled = false;
context.Configuration.ProxyCreationEnabled = false;
Student student = context.Students.Find(1);
context.
Entry(student).
Collection(s => s.Presentations).
Query().
Where(p => p.Id == 1).
Load();
context.
Entry(student).
Collection(s => s.Courses).
Query().
Where(c => c.Id == 1).
Load();
// Trying to run Load without calling Query() first
context.Entry(student).Collection(s => s.Courses).Load();
}
}
}
После загрузки презентаций я вижу, что счетчик для Presentations изменился с 0 на 1:
. Однако после выполнения этого же с Courses ничего не меняется: 
Поэтому я пытаюсь загрузить курсы без вызова Query и работает как ожидалось: 
(Я удалил предложение Where, чтобы еще больше выделить точку - последние две попытки загрузки различаются только по вызову "Query()"
Теперь единственное различие, которое я вижу, состоит в том, что одна связь является "один ко многим", а другая - "ко многим". Это ошибка EF, или я чего-то не хватает?
И btw, я проверил вызовы SQL для двух последних попыток Course -loading, и они на 100% идентичны, поэтому кажется, что EF не заполняет коллекцию.