Axapta 使用查询类将多个表连接到同一个表

Axapta 使用查询类将多个表连接到同一个表,axapta,x++,dynamics-ax-2012,dynamics-ax-2009,Axapta,X++,Dynamics Ax 2012,Dynamics Ax 2009,我正在使用query类构建一个查询,该查询将有两个或三个表连接到同一个表,如下所示: qbds1 = query.addDataSource(tablenum(Table1)); qbds2 = qbds1.addDataSource(tablenum(Table2)); qbds2.relations(true); qbds3 = qbds2.addDataSource(tablenum(Table3)); qbds3.relations(true); qbds4 = qbds3.ad

我正在使用query类构建一个查询,该查询将有两个或三个表连接到同一个表,如下所示:

qbds1 = query.addDataSource(tablenum(Table1));

qbds2 = qbds1.addDataSource(tablenum(Table2));
qbds2.relations(true);

qbds3 = qbds2.addDataSource(tablenum(Table3));
qbds3.relations(true); 

qbds4 = qbds3.addDataSource(tablenum(Table4));
qbds4.relations(true);

qbds5 = qbds3.addDataSource(tablenum(Table5));
qbds5.relations(true);

qbds6 = qbds5.addDataSource(tablenum(Table6));
qbds6.relations(true);
qbds6.joinMode(JoinMode::ExistsJoin);
在本例中,我试图将表4连接到表3,并将表5连接到表3,但它的工作方式与我想要的不一样;我已经与调试器进行了检查,直到:

qbds5 = qbds3.addDataSource(tablenum(Table5))
一切都好;一旦执行这一行,表4和表3之间的连接就会消失,表5和表3之间的连接也不会添加。发送到SQL server的查询实际上是两个查询,一个在表1、表2和表3之间,另一个在表5和表6之间(到表4的链接不存在)。如果我在最后执行info(query.xml()),我会看到所有表之间的连接,就像我想要的那样


甚至可以使用查询类来实现这一点吗?

如果连接级别上有多个数据源,则需要将数据源的
FetchMode
设置为1:1(默认值为1:n)

在本例中,查询树如下所示

Table1
+ Table2
  + Table3
    + Table4
    + Table5
      + Table6
因此
Table4
Table5
处于相同的连接级别,需要1:1的
FetchMode
。要为数据源设置
FetchMode
,请使用类似的代码行

qbds2.fetchMode(QueryFetchMode::One2One);

有关更多信息,请参阅和。

FH Inway的答案是正确的:只需添加

qbdsX.fetchMode(QueryFetchMode::One2One);

对于同一级别上的每个连接。

应该可以尝试
.relations(false)
并手动创建与
addLink(…)的关系。
另请参见类似问题。在看到您的答案之前,我刚刚查看了最后一个链接,我意识到我必须添加fetchMode(QueryFetchMode::One2One)加入到表4和表5(我在发布之前做了,但我想我没有为表4和表5做)。非常感谢你!