Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# NHibernate的连接顺序 我有一个NHiBiNT的问题——它把右连接放在其他连接的中间。这是我的密码: 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); ... }_C#_Nhibernate_Right Join - Fatal编程技术网

C# NHibernate的连接顺序 我有一个NHiBiNT的问题——它把右连接放在其他连接的中间。这是我的密码: 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); ... }

C# NHibernate的连接顺序 我有一个NHiBiNT的问题——它把右连接放在其他连接的中间。这是我的密码: 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); ... },c#,nhibernate,right-join,C#,Nhibernate,Right Join,不幸的是,该查询的结果与期望的结果不同 SELECT * FROM foo INNER JOIN bar ON ... INNER JOIN baz ON ... RIGHT OUTER JOIN something s ON ... WHERE ... 我曾尝试更改GetBaseCriteria中别名的顺序,但没有成功…在我的例子中,我可以通过简单地重新排列***.hbm.xml文件中定义的关系来更改NHibernate形成的查询的顺序 例如,如果foo.hbm.xml定义为

不幸的是,该查询的结果与期望的结果不同

SELECT *
FROM foo
INNER JOIN bar ON ...
INNER JOIN baz ON ...
RIGHT OUTER JOIN something s ON ...     
WHERE ...

我曾尝试更改GetBaseCriteria中别名的顺序,但没有成功…

在我的例子中,我可以通过简单地重新排列***.hbm.xml文件中定义的关系来更改NHibernate形成的查询的顺序

例如,如果foo.hbm.xml定义为


...
...
...
...
只需按如下所示更改bar、something和baz的顺序

<class name="***, ***" table="foo" >
...
<many-to-one name="bar">...</many-to-one>
<many-to-one name="baz" >...</many-to-one>
<many-to-one name="something">...</many-to-one>

...
...
...
...

为什么需要第二条SQL?如果您有一个特定的问题需要按照您的意愿进行查询,那么本机查询可能是一个不错的选择。限制是我们希望重用BaseCriteria,但有时我们希望生成类似于报告的结果,在我的示例中,我将按某个值和项目计数进行分组。而同样的代码用于普通查询-没有正确的连接。不幸的是,这些查询对于普通SQL来说太复杂了。嗨,你能想出怎么做吗?嘿@Garuda,如果我没记错的话-不幸的是没有。我想我们在codeHi@JleruOHeP中使用了一个简化的查询和附加逻辑,谢谢你回复我的评论。我可以想出一个办法。这是因为我已经发布了答案。
<class name="***, ***" table="foo" >
...
<many-to-one name="bar">...</many-to-one>
<many-to-one name="something">...</many-to-one>
<many-to-one name="baz" >...</many-to-one>
<class name="***, ***" table="foo" >
...
<many-to-one name="bar">...</many-to-one>
<many-to-one name="baz" >...</many-to-one>
<many-to-one name="something">...</many-to-one>