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

在这种情况下,第三个参数是条款二,我相信它,将限制添加到加入。

+0

我似乎无法使其工作。我无法找到JoinQueryOver的重载,它让我可以完成你所描述的任务。我只能给路径,别名和JoinType。你使用的是什么版本的NHibernate? – Ramius 2012-03-05 15:04:24

+0

我正在使用NHibernate 3.2。 – Fourth 2012-03-05 15:47:51

+0

这似乎不是3.3的一部分,最接近的匹配需要'ICriterion withClause',这意味着回到魔术字符串。 – Shagglez 2013-02-12 17:32:35