尝试在 vb.net 中获取排序列表

Trying to get a sorted list in vb.net

我有两个从数据库中填充的列表框(可用项目和选定项目)。我可以通过这些列表之间的按钮添加和删除,但是,当我从“选定”列表中删除时,该项目会转到“可用”列表的底部。它没有按字母顺序排列。所以我正在尝试 Linq 选项。

这是我遇到的错误:

Unable to cast object of type 'System.Linq.OrderedEnumerable2[System.Object,System.Object]' to type 'System.Collections.Generic.IEnumerable1[System.Web.UI.WebControls.ListItem]'.

代码:

Imports System.Linq
        'After adding the item to the list sort it
        Dim myQuery As IEnumerable(Of ListItem)

        myQuery = From result In Available.Items _
            Select result _
            Order By result.Text Ascending
        'Rebuild the list
        Available.Items.Clear()
        For Each item In myQuery
            Available.Items.Add(item)
        Next
    End Sub

由于 Items 返回的 ListItemCollection 仅实现 IEnumerable,而不是 IEnumerable(Of ListItem),您应该在查询中添加 Cast。您还需要在清除查询之前使用 ToList() 或其他强制对查询进行评估的方法,因为 LINQ 查询是惰性评估的,否则列表将在您的查询评估之前被清除!

myQuery = (
    From result In Available.Items.Cast(Of ListItem)() _
    Select result _
    Order By result.Text Ascending
).ToList()

您可能还想转 Option Strict On 以帮助找到更多 编译时的问题。