我已经定义了这个查询
[query public genCascadePath(aCSharpResourceModel : CSharpResourceModel) : Sequence(Sequence(CSharpResourceModel)) =
aCSharpResourceModel.hasRelatedCSharpRMManager->collect(rmm | rmm.hasRelatedCSharpRModel->asSequence()->prepend(aCSharpResourceModel))
/]
我实际上做的是:
从“aCSharpModel”获取序列
对于这个序列中的每个元素,我将它定义为一个序列,并在前面添加另一个元素(
rmm.hasRelatedCSharpRModel
collect 内部是无关紧要的,它只是一个 1 对 1 的关系)
所以我需要这样的东西:
{element} -> {{element , element1},{element, element2}}
但是当我尝试从模板访问结果中的每个内部序列时,例如:
[for (path :Sequence(CSharpResourceModel) | aCSharpResourceModelManager.hasRelatedCSharpRModel.genCascadePath()) separator(' -> \n')]
[/for]
我收到一个错误:
org.eclipse.acceleo.engine.AcceleoEvaluationException:模块TODODbResourceRepositoryCSharpFile中第18行的迭代类型无效,用于块(genCascadePath(aCSharpResourceModelManager.hasRelatedCSharpRModel))分隔符('->')。org.eclipse.emf.ecore.impl.DynamicEObjectImpl 不是序列实例(CSharpResourceModel)。
如果我尝试执行相同的 for 循环,但使用迭代器作为 typeCSharpResourceModel
而不是Sequence(CSharpResourceModel)
,它不会产生错误,但它将我的查询结果视为单个序列,就像一个展平的序列一样。
问题是我需要有我一开始描述的行为。
我怎样才能做到这一点?
谢谢你。