VB.Net 使用属性名称对列表进行排序

标签 vb.net linq list sorting

我有一个包含 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/

相关文章:

asp.net - 使用 HtppWebRequest 发布的表单数据无效

vb.net - 如何在一个 TextBox 中进行算术运算?

python - 接受一个列表并返回两个列表的递归函数

c - 尝试实现一个从用户那里获取功能的通用链表

python - 我如何找到数组中每个单独列表的总和?

vb.net - 使用 VB.Net 打印乘法表

c# - Linq-to-sql删除带有FK约束的记录

c# - "Unzip"IEnumerable 在 C# 或最佳替代方案中动态

c# - 字符串集合到字典

asp.net - "Characters Numbers"的正则表达式