0

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

これはまったく可能ですか?結合に使用している 2 つのプロパティがあるため、ここでは detachedcriteria を使用できません。

4

1 に答える 1

0

OK、わかりました。デタッチクエリを使用できます。

私は以下を使用しました:

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 クエリを生成します。

「より良い」代替案があれば、お気軽に共有してください。

于 2013-01-08T11:02:39.273 に答える