Свободный 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 и при этом сохранить общий шаблон для репозиториев?