使用反射按属性对 ExpanoObejct 列表进行排序
Sorting a list of ExpanoObejct by the properties using reflection
我想按属性对 List(Of MyDynamicObject)
进行排序,其中 MyDynamicObject
是 ExpandoObject
。我将 属性 名称作为字符串,因此我需要使用某种反射来传递它们。
假设我有一个列表:
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
我想按属性对 List(Of MyDynamicObject)
进行排序,其中 MyDynamicObject
是 ExpandoObject
。我将 属性 名称作为字符串,因此我需要使用某种反射来传递它们。
假设我有一个列表:
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
.
所以这不再有效了。
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