使用反射按属性对 ExpanoObejct 列表进行排序

Sorting a list of ExpanoObejct by the properties using reflection

我想按属性对 List(Of MyDynamicObject) 进行排序,其中 MyDynamicObjectExpandoObject。我将 属性 名称作为字符串,因此我需要使用某种反射来传递它们。

假设我有一个列表:

MyList = New List(Of Entry)

其中 Entry 有一个 属性 MyProperty_01
现在我想按对象 属性 [=18] 排序 MyList =].

如果是静态对象且没有反射,我会这样做:

MyList = MyList.OrderBy(Function(x) x.MyProperty_01).ToList

现在,如果我需要将 属性 名称作为字符串传递,我可以这样做:

Dim MyPropertyName As String = "MyProperty_01"
MyList = MyList.OrderBy(Function(x) GetType(Entry).GetProperty(MyPropertyName).GetValue(x)).ToList

其中 Entry 是对象 class 引用。

如何使用 ExpandoObject 执行此操作?在 ExpandoObject.

的情况下,我没有 class 参考

所以这不再有效了。

Dim MyPropertyName As String = "MyProperty01"
MyList = MyList.OrderBy(Function(x) GetType().GetProperty(MyPropertyName).GetValue(x)).ToList

这是一种可能的方式,但不使用反射。由于 ExpandoObject 实现了 IDictionary(Of String, Object).Item 接口,您可以将对象转换为该接口类型并通过 属性 名称字符串访问属性,就像您通过字典中相应的字符串键访问值一样:

Dim MyPropertyName As String = "MyProperty01"
MyList = MyList.OrderBy(Function(x) CType(x, IDictionary(Of String, Object))(MyPropertyName)).ToList