ORDA:使用 entitySelection.toCollection() 时如何指定字段顺序?

ORDA: How do I specify field order when using entitySelection.toCollection()?

背景

我正在转换旧的 4D 数据库代码以使用 v17 中引入的新 ORDA 概念。但是,我注意到一个奇怪的地方。当我有一个 entitySelection that I created using ds[$vtTableName].query(), and I convert that entitySelection to a collection (using .toCollection() 时,我指定的字段顺序不被接受。

示例代码:

C_OBJECT($voSelection)
$voSelection:=ds.Users.query("Active = 'True'")

C_COLLECTION($vcUsers)
$vcUsers:=$voSelection.toCollection("FirstName, LastName, DTLastSignin")

预期输出

我希望 $vcUsers 是对象的集合,并且每个对象看起来像:

{ "FirstName" : "John", "LastName" : "Smith", "DTLastSignin" : "2019-10-12T32:23:00" }

实际输出

相反,我收到了不同的订单:

{ "DTLastSignin" : "2019-10-12T32:23:00", "FirstName" : "John", "LastName" : "Smith" }

这已经破坏了我的一些 API 消费者,因为他们希望能够指定字段顺序,这是旧方法 (Selection to JSON) 所尊重的。但是,toCollection() 似乎没有。

我找不到任何类型的关于字段顺序的文档,甚至找不到。 official documentation 显示了遵守顺序的字段,但这可能只是巧合。

答案是不能,因为 toCollection() 字段列表只是一个过滤器。在引擎盖下,实体的属性按其自然顺序循环,并过滤该字段是否为指定的过滤字段之一。

这就是 .toCollection 比经典 Selection to JSON 方法更快的原因。

解决这个问题的一种方法可能是使用 .map() 函数。但是,这可能会降低性能。我没有做过任何分析,所以我不确定。