2009-06-04 94 views
0

在HQL,我可以做這樣的事情:選擇加盟實體與NHibernate的一個的ICriteria

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

如何能夠做到在標準查詢同樣的事情?特別選擇不是from子句中第一個實體的內容。

回答

1

您可以通過創建子標準並選擇具有投影的標量結果來加入。您的條件查詢可能看起來像:

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(...) 
    ... 
) 

我不知道您的域名看起來還是你想什麼什麼離開查詢,所以上述可能不完全正確。但是,它應該是您開始所需的。

+0

非常感謝Stuart – mattcole 2009-06-05 10:32:34