Fluido NHibernate no crea una parte IN de la cláusula WHERE

Tengo consultas Fluent NHibernate Linq donde verifico valores basados ​​en matrices de tiempo de ejecución. Un ejemplo básico sería 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();
}

Espero que la declaración SQL generada se vea algo como esto:

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

Sin embargo, lo que estoy encontrando en cambio es que la instrucción SQL generada simplemente emite la cláusula WHERE (comprobada en el Analizador) y selecciona toda la tabla, y luego parece que ejecuta el filtro en la memoria una vez que recupera todos los datos.

Algo a tener en cuenta: tengo una clase de repositorio genérico a través del cual se canalizan todas estas llamadas. El método de consulta es el siguiente:

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

Obviamente, esta (falta de una cláusula where) no es aceptable en una tabla con una gran cantidad de datos. ¿Qué puedo hacer para forzar a NHibernate a que genere la consulta correctamente con la cláusula WHERE y siga manteniendo un patrón genérico para los repositorios?

Respuestas a la pregunta(3)

Su respuesta a la pregunta