Nhibernate查询API中相同表之间的内部联接

Nhibernate查询API中相同表之间的内部联接,nhibernate,tsql,Nhibernate,Tsql,我有两个域对象映射正确:电子邮件和行动计划 表结构类似于: create table emails(id int identity(1,1), subject nvarchar(512), parentEmailId int, rootEmailId int) create table actionPlans(id int identity(1,1), dueDate datetime, emailId int) insert into emails(subject, parentEmail

我有两个域对象映射正确:电子邮件和行动计划

表结构类似于:

create table emails(id int identity(1,1), subject nvarchar(512), parentEmailId int, rootEmailId int)

create table actionPlans(id int identity(1,1), dueDate datetime, emailId int)

insert into emails(subject, parentEmailId, rootEmailId)
values('First email', null,1)

insert into emails(subject, parentEmailId, rootEmailId)
values('RE: FirstEmail', 1, 1)

insert into emails(subject, parentEmailId, rootEmailId)
values('RE: RE: FirstEmail', 2, 1)

insert into actionPlans(dueDate, emailId)
values('2011-01-01', 2)
select a.* FROM actionPlans a
inner Join emails e on a.emailId = e.id
where e.rootEmailId = 1
parentEmailId是一个层次结构,rootEmailId始终是第一封邮件(启动电子邮件)。 在每个层次上,我都可以创建一个行动计划(每个层次只有一个)

现在我正在使用rootEmailId获取行动计划

比如:

 return
            this.CreateCriteria(typeof(ActionPlan), "ap")
            .CreateAlias("Message", "m")
            .Add(Restrictions.Eq("m.RootMessage.Id", rootMessageId))
            .UniqueResult<ActionPlan>();
工作正常:但这会让我很头疼,因为我需要从db获取电子邮件并获取rootEmailid

现在我想发送emailId而不是rootEmailId 那么,如何在Nhibernare查询API中转换以下TSQL呢

select a.*
from actionPlans a
    inner join emails rootEmail
        on rootEmail.id = a.emailId
    inner join emails e
        on e.rootEmailId = rootEmail.rootEmailId
where e.id = 2
现在我可以发送2,1或3,并将获得相同的行动计划


谢谢

你有不能使用HQL(甚至TSQL)的原因吗?@Michael Maddox-真的没有,只是想知道。你有不能使用HQL(甚至TSQL)的原因吗?@Michael Maddox-真的没有,只是想知道。