用于从不同表中进行选择的nhibernate标准

我有以下表格模型:

在此处输入图像描述

我希望以下SQL命令作为nhibernate标准:

SELECT * FROM单位WHERE OID IN(选择OID来自订单WHERE PONumber 0 ORDER BY PONumber LIMIT 5)

– >换句话说:最后5个订单

编辑:

我的映射

Unit.hbm.xml

                       

Order.hbm.xml

                 

Employee.hbm.xml

           

EDIT2:

这是我的查询命令:

 var query = m_hibernateSession.QueryOver(() => orderAlias) .JoinAlias(() => orderAlias.ID, () => unitAlias, JoinType.InnerJoin) .TransformUsing(Transformers.DistinctRootEntity) .OrderBy(x => x.PONumber).Desc.Take(5); 

谢谢

如果你想要最后五个订单,我会用稍微不同的查询来解决问题

 Select * From order o join Units U on O.OID = U.OID Order by O.PONumber limit 5 

在nhibernate会是这样的(未经测试)

 Order orderAlias = null; Unit unitAlias = null; var query = session.QueryOver(() => orderAlias) .JoinAlias(() => orderAlias.Units, () => unitAlias, JoinType.InnerJoin) //.TransformUsing(Transformers.DistinctRootEntity) if you have duplicates .OrderBy(x => x.PONumber).Desc.Take(5); 

UPDATE

您也可以只加载Order实体。 NHibernate将根据您的映射信息(延迟/急切加载或连接)自动加载所有单位行。

 var query = session.QueryOver().OrderBy(x => x.PONumber).Desc.Take(5);