2016-12-02 14 views
0

У меня есть два запроса: первый запрос возвращает верх 10/20 recoords, второй запрос возвращает общий счет записи из первого запроса. Оба запроса должны использовать одно и то же условие фильтра.Доля параметра NHibernate в нескольких запросах

Как написать условие фильтра и параметр, используемый в условиях фильтра в одном месте и использовать в обоих запросах.

Условие Я могу хранить в строковой переменной и использовать в обоих запросах, но как делиться параметрами?

Я использую HQL

ответ

1

Проверьте это аналогично Q & A: Nhibernate migrate ICriteria to QueryOver

Существует уроженцем поддержка в NHiberante для подсчета строк. Давайте иметь некоторый запрос

// the QueryOver 
var query = session.QueryOver<MyEntity>(); 

Это может иметь любое количество частей, где, прогнозы ... Теперь мы просто взять его основные критерии и использовать трансформатор, чтобы создать совершенно новые критерии - вне коробки готовы, чтобы получить общее ROWCOUNT

// GET A ROW COUNT query (ICriteria) 
var rowCount = CriteriaTransformer.TransformToRowCount(query.UnderlyingCriteria); 

Следующий шаг заключается в использовании FUTURE, чтобы получить оба запроса в одном поездка туда и обратно к БД

// ask for a list, but with a Future, to combine both in one SQL statement 
var list = query 
    .Future<MyEntity>() 
    .ToList(); 

// execute the main and count query at once 
var count = rowCount 
    .FutureValue<int>() 
    .Value; 

// list is now in memory, ready to be used 
var list = futureList 
    .ToList(); 
+0

upvote предложившего 'Future' –