QueryOver - 为Join添加附加条件
问题描述:
我对NHibernate和QueryOver相当陌生,我无法让NHibernate生成我需要的SQL。QueryOver - 为Join添加附加条件
我需要做一个连接,并有一个额外的标准,所以我避免从我加入的表中获取大量数据。
我从QueryOver接收的SQL是:
SELECT * FROM adresse this_
left outer join r580_test.afvigelse remarkalia1_ on this_.id=remarkalia1_.adrid
left outer join r580_test.afvigelseklagepunkter remarkcomp5_ on remarkalia1_.id=remarkcomp5_.afvigelseid
left outer join r580_test.klagepunkter complainta2_ on remarkcomp5_.klagepunktid=complainta2_.id
WHERE this_.id = 16633 and remarkalia1_.dato between '2009-03-13 00:00:00' and '02-03-2012 16:34:35'
我想这是什么(间已被转移到年底第一左外,其中日加入):
SELECT * FROM adresse this_
left outer join r580_test.afvigelse remarkalia1_ on this_.id=remarkalia1_.adrid and remarkalia1_.dato between '2009-03-13 00:00:00' and '02-03-2012 16:34:35'
left outer join r580_test.afvigelseklagepunkter remarkcomp5_ on remarkalia1_.id=remarkcomp5_.afvigelseid
left outer join r580_test.klagepunkter complainta2_ on remarkcomp5_.klagepunktid=complainta2_.id
WHERE this_.id = 16633
我QueryOver看起来是这样的:
adr = session.QueryOver<Address>()
.Where(x => x.Id == 16633)
.JoinQueryOver<Remark>(y => y.Remarks).Where(y => y.Created > DateTime.Now.AddDays(-14))
.JoinAlias(y => y.RemarkComplaint,() => complaintAlias, JoinType.LeftOuterJoin)
.SingleOrDefault();
任何人有关于如何解决这个问题的想法?
答
有用于joinqueryover几个重载 - 我相信你想要的东西,如:
Remark remark = null;
adr = session.QueryOver<Address>()
.Where(x => x.Id == 16633)
.JoinQueryOver<Remark>(y => y.Remarks,() => remark, y => y.Created > DateTime.Now.AddDays(-14))
.JoinAlias(y => y.RemarkComplaint,() => complaintAlias, JoinType.LeftOuterJoin)
.SingleOrDefault();
在这种情况下,第三个参数是条款二,我相信它,将限制添加到加入。
我似乎无法使其工作。我无法找到JoinQueryOver的重载,它让我可以完成你所描述的任务。我只能给路径,别名和JoinType。你使用的是什么版本的NHibernate? – Ramius 2012-03-05 15:04:24
我正在使用NHibernate 3.2。 – Fourth 2012-03-05 15:47:51
这似乎不是3.3的一部分,最接近的匹配需要'ICriterion withClause',这意味着回到魔术字符串。 – Shagglez 2013-02-12 17:32:35