NHibernate Fluent não cria parte da cláusula WHERE

Eu tenho consultas Fluent NHibernate Linq onde eu verifico valores com base em matrizes de tempo de execução. Um exemplo básico seria algo como:

var array = [1,2,3,4,5,6];
using (var session = SessionProvider.SessionFactory.OpenSession())
{
  return session.Query<MyObject>().Where(x => array.Contains(x.CompareVal)).ToList();
}

Eu esperaria que a instrução SQL gerada se parecesse com isto:

SELECT CompareVal, Column1, Column2
FROM MyObject
WHERE CompareVal IN (1,2,3,4,5,6)

No entanto, o que eu estou encontrando em vez disso é que a instrução SQL gerada simplesmente emite a cláusula WHERE (comprovada ao assistir no Profiler) e seleciona a tabela inteira e, em seguida, parece executar o filtro na memória depois que recupera todos os dados.

Algo a se notar - Eu tenho uma classe de Repositório Genérico na qual todas essas chamadas são canalizadas. O método de consulta é o seguinte:

public IList<T> Query(Func<T, bool> criteria)
{
  using (var session = SessionProvider.SessionFactory.OpenSession())
  {
    return session.Query<T>().Where(criteria).ToList();
  }
}

Obviamente, isso (falta de uma cláusula where) não é aceitável em uma tabela com uma grande quantidade de dados. O que posso fazer para forçar o NHibernate a gerar a consulta corretamente com a cláusula WHERE e ainda manter um padrão genérico para os repositórios?

questionAnswers(3)

yourAnswerToTheQuestion