Союз с NHibernate и критериями? - PullRequest
1 голос
/ 21 декабря 2011

Союз с NHibernate и критериями:

Возможно ли это в Criteria или QueryOver? Если нет, есть ли другой способ добиться объединения двух результатов в одном запросе?

Ответы [ 3 ]

6 голосов
/ 22 декабря 2011

Вы не можете выполнить объединение напрямую, но вы можете выполнить два будущих запроса и объединить результаты в коде:

var resultSet1 = this.Session.CreateCriteria<A>().Future<A>();
var resultSet2 = this.Session.CreateCriteria<B>().Future<B>();

После этого, когда перечисляется любой набор результатов, NHibernate выдаст одинзапрос к базе данных, которая будет возвращать несколько наборов результатов.Обратите внимание, что если вы не используете SQL Server, база данных может не поддерживать несколько наборов результатов.

6 голосов
/ 21 декабря 2011

Это невозможно даже при использовании HQL. Посмотри на это другое С.О. сообщение

Один из способов - вернуться к необработанному SQL и использовать именованный запрос

<sql-query name="MyQuery">
<![CDATA[
select col1,col2 from table1
union
select col1,colA from table2
]]>
</sql-query>

И используйте AliasToBeanResultTransformer, чтобы преобразовать его обратно в DTO / POCO

var query = Session
  .GetNamedQuery("MyQuery")
  .SetResultTransformer(new AliasToBeanResultTransformer(typeof(MyDto)));
  return query.List<MyDto>();
3 голосов
/ 21 декабря 2011

Вы можете использовать -

NHibernate.Criterion.Restrictions.Or(ICriterion FirstQuery,
                                     ICriterion SecondQuery)

как ваши критерии в одном запросе.

...