Свободный NHibernate не создает В части предложения WHERE

У меня есть запросы Fluent NHibernate Linq, где я проверяю значения на основе массивов времени выполнения. Базовый пример будет что-то вроде:

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

Я ожидаю, что сгенерированный оператор SQL будет выглядеть примерно так:

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

Однако вместо этого я обнаружил, что сгенерированный оператор SQL просто испускает предложение WHERE (доказано наблюдением в Profiler) и выбирает всю таблицу, а затем, кажется, запускает фильтр в памяти, как только получает все данные обратно.

Что-то, на что стоит обратить внимание - у меня есть класс Generic Repository, через который все эти вызовы направляются. Метод Query выглядит следующим образом:

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

Очевидно, что это (отсутствие предложения where) недопустимо в таблице с большим объемом данных. Что я могу сделать, чтобы заставить NHibernate правильно сгенерировать запрос с предложением WHERE и при этом сохранить общий шаблон для репозиториев?

Ответы на вопрос(3)

Ваш ответ на вопрос