【发布时间】:2011-07-28 19:13:30
【问题描述】:
我想从 2 个不同的表中检索一些数据。它们被命名为“A”和“B”。 还有另一个名为“C”的表。
A 和 B 都引用了“C”,但“C”既没有引用 A 也没有引用 B。
我的 SQL 命令是这样的:
select
A.x,
A.y,
B.z
from
A
LEFT OUTER JOIN C ON C.i = A.i
LEFT OUTER JOIN B ON B.i = C.i
问题是:我在表 A 中有一些我需要的数据,在表 B 中有一些数据。 我需要从表 A 中检索所有数据,其中表 A 中的属性等于表 B 的属性,因此需要从表 B 中检索一些数据。 这很简单,非常简单的 HQl 命令(使用 LINQ 更容易):
select a.x, a.y, b.z
from A as a, B as b
where a.x = b.x
但问题是:当 a.x 为 NULL 时,我还需要从 A 检索数据。我当然会从 b.x 得到一个空值
我尝试在 LINQ 上使用 DefaultIfEmpty(),但由于我在实体上使用 session.Query(),因此在 NH 3 中尚未实现 DefaultIfEmpty。
如何在 HQL 中编写?
【问题讨论】:
-
使用 HQL 时,您查询的是类,而不是表。这就是使用 ORM 的原因之一。那么你的类模型看起来如何?
标签: nhibernate join hql outer-join