1

与 NHibernate 和标准联合:

是否可以在 Criteria 或 QueryOver 中使用?如果没有,是否有任何其他方法可以在同一查询中实现两个结果的联合?

4

3 回答 3

6

即使使用 HQL,这也是不可能的。请参阅此其他 SO帖子

一种方法是退回到原始 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>();
于 2011-12-21T14:24:39.653 回答
6

您不能直接进行联合,但您可以执行两个未来查询并将结果合并到代码中:

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

此后,当枚举任一结果集时,NHibernate 将向数据库发出单个查询,该查询将返回多个结果集。注意,如果您不使用 SQL Server,则数据库可能不支持多个结果集。

于 2011-12-21T22:57:32.347 回答
3

您可以使用 -

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

作为单个查询中的条件。

于 2011-12-21T15:39:57.120 回答