NHibernate имеет встроенный метод, чтобы сделать именно то, что я думаю, вы спрашиваете. (ISession.CreateFilter)
Например, если у вас загружен объект «Клиент» с именем «Клиент», у которого есть коллекция «Заказы» с именем «Заказы», вы можете загрузить заказы следующим образом.
var orderQuery = session.CreateFilter(customer.Orders, string.Empty);
var orders = orderQuery.List<Order>();
Это эквивалентно следующему, только немного чище.
var orderQuery = session.CreateQuery("from orders o where o.Customer.id = :customerId")
.SetParameter("customerId", customer.Id);
var orders = orderQuery.List<Order>();
Если вы хотите отфильтровать коллекцию, предложение hql where может быть передано в качестве второго аргумента ISession.CreateFilter(object, string)