NHibernate条件查询时间内部联接

NHibernate条件查询时间内部联接,nhibernate,inner-join,criteria,Nhibernate,Inner Join,Criteria,在NHibernate中,是否可以在查询期间使用条件内部连接对象 我想实现以下目标: 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(t

在NHibernate中,是否可以在查询期间使用条件内部连接对象

我想实现以下目标:

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,因为我有两个用于连接的属性。

好的,我想出来了,您可以使用detachedquery

我使用了以下方法:

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();
它生成一个与内部联接相同的in查询

如果你有任何更好的选择,请随时分享