2009-06-04 3 views
0

В HQL я могу сделать что-то вроде этого:Выбор вступил объект с ICriteria в NHibernate

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

Как я могу достичь того же в запросе Criteria? В частности, выбрать то, что не является первым объектом в предложении 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

Смежные вопросы