4

使用 TypeAccessor.Create FastMember 时,似乎总是返回按字母排序的列列表。是否可以告诉它保留类中列的顺序?

例如:

var testClass = new { B = "1", A = "2" };

将从GetMembers返回A列然后B,如果可能的话,我想让它保留B然后A的顺序。

4

2 回答 2

3

我使用列顺序选项创建了这个项目的一个分支,并向原始存储库添加了一个PR 。OrdinalAttribute添加以指定列顺序。

可以使用序数属性,如下所示:

        public class ObjectReaderWithDefinedColumnsOrderType
        {
            [Ordinal(1)]
            public byte C { get; set; }
            [Ordinal(0)]
            public int? D { get; set; }
        }
  • IDataReader返回的对象ObjectReader.Create()将根据定义的属性具有列顺序。
  • 如果属性未在源类中定义,则使用字母顺序。
  • 如果两个字段具有相同的 Ordinal 值,则使用字母顺序。
  • 如果仅为某些属性定义了属性,则列按序号值排序,然后按字母顺序(没有属性的属性被视为-1序号)。

您可以立即使用 my for 或等到 PR 与原始存储库合并。

于 2019-03-29T01:28:07.093 回答
2

看起来 Evk 是正确的,它不能通过标准 API 来完成。为了完整起见,我将把这个作为答案。

于 2016-11-17T14:45:31.670 回答