【发布时间】:2015-06-19 11:12:02
【问题描述】:
我在使用 Nhibernate 时遇到了问题 - 它将右连接放在其他连接的中间。这是我的代码:
private DetachedCriteria GetBaseCriteria()
{
return DetachedCriteria.For<Foo>("foo")
.CreateAlias("foo.Bar", "bar")
.CreateAlias("bar.Baz", "baz", JoinType.InnerJoin);
}
public void Method()
{
var criteria = GetBaseCriteria();
criteria.CreateAlias("foo.Something", "something", JoinType.RightOuterJoin);
...
}
而生成的 SQL 是
SELECT *
FROM foo
INNER JOIN bar ON ...
RIGHT OUTER JOIN something s ON ...
INNER JOIN baz ON ...
WHERE ...
很遗憾,该查询的结果与预期的不同
SELECT *
FROM foo
INNER JOIN bar ON ...
INNER JOIN baz ON ...
RIGHT OUTER JOIN something s ON ...
WHERE ...
我试图更改 GetBaseCriteria 中别名的顺序 - 但没有运气...
【问题讨论】:
-
为什么需要第二个 SQL?如果您有特定问题需要根据需要进行查询,那么本机查询可能是您的最佳选择。
-
限制是我们想重用 BaseCriteria 但有时我们想产生类似报告的结果,在我的示例中,我将按 Somenthing 和项目计数进行分组。虽然相同的代码用于普通查询 - 没有正确的连接。不幸的是,这些查询对于普通 SQL 来说太复杂了。
-
嗨,你知道怎么做吗?
-
嘿@Garuda,如果我没记错的话 - 不幸的是没有。我认为我们在代码中使用了简化的查询和附加逻辑
-
嗨@JleruOHeP,感谢您回复我的评论。我可以想办法做到这一点。正如我已经发布了答案。
标签: c# nhibernate right-join