【发布时间】:2011-09-01 06:59:09
【问题描述】:
我正在尝试使用 ICriteria 创建具有连接的查询 健康)状况。我试图生成的 SQL 应该是这样的
SELECT c.ClientID
FROM Client c
LEFT OUTER JOIN ClientContact t on c.ClientID = t.ClientID AND
t.ContactType = 'Email'
如果我使用类似的标准
m_ClientRepository.QueryAlias("client")
.CreateCriteria("client.Contacts", "c", JoinType.LeftOuterJoin)
.Add(Restrictions.Eq("c.ContactType", ContactType.Email));
它会在下面生成我不想要的sql。
SELECT c.ClientID
FROM Client c
LEFT OUTER JOIN ClientContact t on c.ClientID = t.ClientID
WHERE t.ContactType = 'Email'
如果 ICriteria 不可行,是否可以使用 ICriteria 或 HQL 执行此操作?
编辑:我发现 nHibernate 2.1(我正在使用)现在可以allow this。虽然不确定 ICriteria,但这是我的偏好。
【问题讨论】:
-
我在 Criteria 中寻找完全相同的东西。我们需要 with 表达式。
-
不是一个 sql 专家,但为什么你想要第一个选项而不是第二个选项,他们给出的结果不一样吗?
-
嗨 Colin,他们给出的结果不同。
-
@Colin 它们与
INNER JOIN相同(或只是JOIN,相同)。使用LEFT OUTER(或LEFT),结果可能会有所不同。 -
哥们,你是不是忘了接受某个答案,或者两个都不接受?
标签: c# .net nhibernate