Biegły NHibernate nie tworzy IN części klauzuli WHERE

Mam płynne kwerendy NHibernate Linq, w których sprawdzam wartości na podstawie tablic czasu wykonywania. Podstawowym przykładem może być coś takiego:

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();
}

Spodziewałbym się, że wygenerowana instrukcja SQL będzie wyglądać mniej więcej tak:

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

Jednak zamiast tego stwierdzam, że wygenerowana instrukcja SQL po prostu emituje klauzulę WHERE (sprawdzoną przez oglądanie w programie Profiler) i wybiera całą tabelę, a następnie wydaje się uruchamiać filtr w pamięci po odzyskaniu wszystkich danych.

Coś do odnotowania - mam klasę Repozytorium rodzajowe, przez którą przechodzą wszystkie te połączenia. Metoda zapytania jest następująca:

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

Oczywiście to (brak klauzuli gdzie) jest niedopuszczalne w tabeli z dużą ilością danych. Co mogę zrobić, aby zmusić NHibernate do prawidłowego wygenerowania zapytania za pomocą klauzuli WHERE i nadal zachować ogólny wzór dla repozytoriów?

questionAnswers(3)

yourAnswerToTheQuestion