имам редактор, където хората могат да създават персонализирани sql заявки. тези заявки са NHibernate.IQuery обекти.
в нашия проект използваме NHibernate.Linq.LinqExtensionMethods.Query, за да получим обект IQueryable, който може да се използва за прилагане на филтри, които се изпълняват отложено (всичко в DB).
сега искам да създам друг филтър, който е базиран на персонализираните 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);