NHibernate Criteria查询时间内连接

时间:2013-01-08 10:04:54

标签: nhibernate inner-join criteria

NHibernate是否可以在使用Criteria的查询时间内连接对象?

我想做到这样的事情:

SELECT p
FROM Person p
INNER JOIN Section s
    ON   p.sid = s.id 
    AND  p.companyid = s.companyid

连接不在映射中(并且不能存在)。 是否有类似以下语法的内容?

var list = session.CreateCriteria(typeof(Person), "p")
.CreateCriteria(typeof(Section), "s")
.Add(Expression.EqProperty("p.SectionId", "s.Id"))
.Add(Expression.EqProperty("p.CompanyId", "s.CompanyId"))
.List();

这一切都可能吗?我不能在这里使用detachedcriteria,因为我有两个属性我正在用于加入。

1 个答案:

答案 0 :(得分:0)

好的,我明白了,你可以使用一个独立的查询。

我使用了以下内容:

var list = session.CreateCriteria(typeof(Person), "p")
             .Add(Subqueries.PropertyIn("SectionId", typeof(Section), "s")
                    .SetProjection(Projections.Property("Id"))
                    .Add(Expression.EqProperty("s.Id", "p.SectionId"))
                    .Add(Expression.EqProperty("s.CompanyId", "p.CompanyId"))
                )).List();

其中生成的查询与内部联接的作用相同。

如果您有任何“更好”的选择,请随时分享。