与NHibernate和Criteria联盟?

时间:2011-12-21 14:15:04

标签: c# nhibernate union nhibernate-criteria

与NHibernate和Criteria结盟:

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

3 个答案:

答案 0 :(得分:6)

即使使用HQL也无法做到这一点。见另一个S.O. post

一种方法是回退到原始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>();

答案 1 :(得分:6)

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

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

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

答案 2 :(得分:3)

您可以使用 -

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

作为单个查询中的标准。