NHibernate联接筛选器(带子句?)

NHibernate联接筛选器(带子句?),nhibernate,join,Nhibernate,Join,我试图找到一种使用HQL对连接对象进行过滤的方法。Exmaple: from Cat as cat inner join tableX as x left join tableY as y with x.someID = y.someID 我知道with子句可以很好地处理参数:param,如下所示: from Cat as cat inner join tableX as x left join tableY as y with

我试图找到一种使用HQL对连接对象进行过滤的方法。Exmaple:

from Cat as cat
    inner join tableX as x
    left join tableY as y
        with x.someID = y.someID
我知道with子句可以很好地处理参数:param,如下所示:

from Cat as cat
    inner join tableX as x
    left join tableY as y
        with x.someID = :param
但在我的例子中,我没有参数

更新: 这里有更多的信息:

Table Cat       TableX:              TableY:
---------       ------               --------
PK ID           PK EntityID          PK EntityID
Column 1        Column State         Column State     
Column 2        Column 1             Column 1
Column 3        Column 2
表Cat和表Y具有一对一映射。 表Cat和表X具有一对多映射

我主要想在HQL中说:

SQL:    SELECT *
        FROM Cat c
        INNER JOIN TableX x on c.ID = x.EntityID
        LEFT JOIN TableY y on x.EntityID = y.EntityID and x.State = y.State
对此有什么想法或解决方法吗


提前谢谢你

我相信如果没有映射关联,您想要实现的目标是不可能的。您不能进行外部θ连接,只能进行交叉和内部连接。

第一个查询不起作用吗?不,只有第二个起作用,它不允许我在WITH子句中放置表别名,仅参数:对不起,原来的标题把我弄糊涂了。有什么原因不能只使用where子句吗?在这种情况下,由于左连接,如果我将x.someID=y.someID放在where中,结果集会完全不同。我需要特别使用左连接。我会尝试用更多的信息更新上面的例子。谢谢你的回答。。。在这种情况下,如何进行映射以使NHibernate在左侧外部联接中添加AND?我正在研究这个问题已经有一段时间了,我也没有看到一个映射给我这个。。。谢谢你的帮助。Thanks@Akrion,我真的不知道你的域名。您可以在这两个实体之间建立关联。也就是说,如果这两个实体在您的领域中相互了解没有意义,并且您需要一个在HQL中无法完成的非常具体的查询,那么不要害怕使用好的老式SQL。您可以从SQL查询返回实体。好的旧SQL的问题是,代码依赖HQL IQuery ReturnAlias方法来获取列别名,但如果使用NHibernate,就我所知,它不会提供有关返回结果集的任何信息。。。没有填充任何集合。。。没有ReturnAlias,没有ReturnTypes等等@Akrion,我不是说使用命名sql查询,尽管您可以。再次阅读有关将根实体和联接添加到sql查询的链接。