Coleção NHibernate IQueryable como propriedade de raiz

Eu tenho um objeto raiz que possui uma propriedade que é uma coleção.

Por exemplo:

I have a Shelf object that has Books.

// Now
public class Shelf 
{
    public ICollection<Book> Books {get; set;}
}

// Want 
public class Shelf 
{
   public IQueryable<Book> Books {get;set;}
}

O que eu quero realizar é retornar uma coleção que seja IQueryable para que eu possa executar a paginação e a filtragem da coleção diretamente do pai.

var shelf = shelfRepository.Get(1);

var filtered = from book in shelf.Books
               where book.Name == "The Great Gatsby"
               select book;

Eu quero que essa consulta seja executada especificamente pelo NHibernate e não um get all para carregar uma coleção inteira e depois analisá-la na memória (que é o que acontece atualmente quando eu uso o ICollection).

O raciocínio por trás disso é que minha coleção pode ser enorme, dezenas de milhares de registros, e uma consulta get all pode bash meu banco de dados.

Eu gostaria de fazer isso implicitamente para que, quando o NHibernate veja um IQueryable na minha classe, ele saiba o que fazer.

Examinei o provedor LINQ do NHibernate e atualmente estou tomando a decisão de coletar grandes coleções e dividi-las em seu próprio repositório para que eu possa fazer chamadas explícitas para filtragem e paginação.

O LINQ To SQL oferece algo semelhante ao que estou falando.

questionAnswers(3)

yourAnswerToTheQuestion