Вы сделали запрос на уроке School и ограничили свои результаты на нем, а не на связанных объектах.
Теперь есть много способов сделать это.
Вы можете сделать статический фильтр, как сказал IanL, но он не очень гибкий.
Вы можете просто выполнить итерацию коллекции, как mxmissile, но это уродливо и медленно (особенно учитывая соображения отложенной загрузки)
Я бы предложил 2 разных решения:
Во-первых, вы поддерживаете запрос, который у вас есть, и запускаете динамический фильтр для коллекции (поддерживая ленту с отложенной загрузкой) и выполняете обход в базу данных:
var school = GetSchoolAndStudentsWithDOBAbove(5, dob);
IQuery qDob = nhSession.CreateFilter(school.Students, "where DOB > :dob").SetDateTime("dob", dob);
IList<Student> dobedSchoolStudents = qDob.List<Student>();
Во втором решении просто извлеките и школу, и учеников одним выстрелом:
object result = nhSession.CreateQuery(
"select ss, st from School ss, Student st
where ss.Id = st.School.Id and ss.Id = :schId and st.DOB > :dob")
.SetInt32("schId", 5).SetDateTime("dob", dob).List();
ss - объект School, а st - коллекция Student.
И это определенно можно сделать, используя запрос критерия, который вы используете сейчас (используя Прогнозы)