在NHibernate中选择具有ICriteria的连接实体

时间:2009-06-04 14:26:07

标签: nhibernate criteria

在HQL中,我可以这样做:

select roleHeldByOwner.TargetPerson
from Person roleOwner
join roleOwner.RolesOnPeople roleHeldByOwner
where roleOwner.Id = :roleOwnerId

如何在Criteria查询中实现相同的功能?具体选择不是from子句中第一个实体的东西。

1 个答案:

答案 0 :(得分:1)

您可以通过创建子标准并使用预测选择标量结果来加入。您的Criteria查询可能类似于:

session.CreateCriteria(typeof(Person))
    .Add(Restrictions.Eq("Id", roleOwnerId))
    .SetProjection(Projections.Property("TargetPerson"))
    .CreateCriteria("RolesOnPeople", JoinType.InnerJoin) // Or LeftOuterJoin, etc.
    .List();

如果您需要多个投影,请使用ProjectionList,如:

.SetProjection(Projections.ProjectionList()
    .Add(Projections.Property("...", ...))
    .Add(...)
    ...
)

我不确定您的域名是什么样的,或者您想要从查询中获得什么,因此上述内容可能并不完全正确。但是,它应该是你需要开始的。