у меня есть редактор, в котором люди могут создавать собственные sql-запросы. эти запросы являются объектами NHibernate.IQuery.
в нашем проекте мы используем NHibernate.Linq.LinqExtensionMethods.Query для получения объекта IQueryable, который можно использовать для применения фильтров, которые выполняются отложенно (все в БД).
теперь я хочу создать еще один фильтр, основанный на пользовательских sql-запросах. то, что я хочу, это что-то вроде этого:
queryable.Where(x=> <sql-query contains x>)
единственное, что я могу сделать прямо сейчас, это заранее выполнить sql-запрос, а затем отфильтровать запрос с помощью полученного списка элементов.
IList<T> elements = query.List<T>();
queryable.Where(x => elements.Contains(x)).ToList();
проблема с таким подходом в том, что список элементов может быть огромным. если это возможно, я хотел бы выполнить весь оператор непосредственно в базе данных, чтобы мне не нужно было передавать все объекты в мое приложение, а затем отправлять все объекты обратно в базу данных в качестве параметров фильтра...
редактировать: первый запрос (тот, который дает список элементов для проверки во втором запросе) построен из простой sql-строки следующим образом:
ISQLQuery sqlQuery = CurrentSession.CreateSQLQuery(myQueryString);//create query
sqlQuery.AddEntity(typeof (T)); //set result type
IQuery query = sqlQuery.SetReadOnly(true);