通常情況下,如果你知道與你想排序的屬性,您將能夠只是做這樣的事情:
clients.Sort(Function(x, y) x.Name.CompareTo(y.Name))
在上面的例子中,我當然選上Name
財產(我不知道Client
這個類有什麼屬性,我只是用它作爲例子)
但是,由於你不知道你要在運行時使用哪個屬性,你需要做更復雜的事情,如果你真的想使用這個類的實際屬性名稱,你可以使用反思動態檢索屬性的值,例如:
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
您是否真的需要將屬性名稱存儲在ViewState中?然後,我會使用一個'DataTable'來代替它,您可以使用列名和LINQ來對它進行排序。 –
如果我走這條路線,那麼我必須將我的列表轉換成我想避免的數據表。 – user3129969