【问题标题】:Trying to get a sorted list in vb.net试图在 vb.net 中获取排序列表
【发布时间】:2017-04-02 18:03:24
【问题描述】:

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

【问题讨论】:

    标签: asp.net vb.net linq sorting enumerable


    【解决方案1】:

    由于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 以帮助查找更多 编译时的问题。

    【讨论】:

    • 或者干脆写Dim query = Aggregate result As ListItem In Available.Items Order By result.Text Into ToList
    • @Sehnsucht 谢谢你 - 我以前从未见过聚合语法。现在浏览the docs。再次感谢你教会了我一些新东西! :-)
    • @Sehnsucht 我很欣赏这个建议。
    猜你喜欢
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-28
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多