我有一个包含 Client
对象的列表。我想通过使用属性名称升序或降序对列表进行排序,这是我在 viewstate 的代码中已有的: ViewState("PropertyName")
和 ViewState("Order")
Dim objList As List(Of Client) = Session("ClientList")
objList.Sort(ViewState("PropertyName") + " " + ViewState("Order"))
datarepeater.datasource = objList
我怎样才能实现这个目标?
最佳答案
通常,如果您知道要排序的属性,则可以执行如下操作:
clients.Sort(Function(x, y) x.Name.CompareTo(y.Name))
在上面的示例中,我当然是对 Name
属性进行排序(我不知道 Client
类有哪些属性,我只是使用以此为例。
但是,由于您直到运行时才知道要使用哪个属性,因此您需要做一些更复杂的事情。如果您确实想使用类的实际属性名称,您可以使用Reflection动态检索属性的值,例如:
clients.Sort(Function(x, y)
Dim xProperty As PropertyInfo = x.GetType().GetProperty(ViewState("PropertyName").ToString)
Dim yProperty As PropertyInfo = y.GetType().GetProperty(ViewState("PropertyName").ToString)
Dim xValue As Object = xProperty.GetValue(x)
Dim yValue As Object = yProperty.GetValue(y)
Return xValue.ToString().CompareTo(yValue.ToString())
End Function)
要反转排序顺序,只需将返回值乘以-1
,或者切换要比较的对象。例如:
If ViewState("Order") = "Ascending" Then
Return xValue.ToString().CompareTo(yValue.ToString())
Else
Return yValue.ToString().CompareTo(xValue.ToString())
End If
关于VB.Net 使用属性名称对列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22252794/