在List(Of T)中查找值

时间:2014-06-10 09:12:19

标签: wpf vb.net list

我是List(Of T)的新手。请帮帮我。

我在系统运行时加载我的List值。如何搜索列表中的数据?

1。我的列表类

Public Class Directory
    Public strdirname As String
    Public strdircategory As String
    Public strdirlevel As String

    Public Sub New(ByVal m_dirname As String, ByVal m_dirlevel As String, ByVal m_dircat As String)
        Try
            strdirname = m_dirname
            strdirlevel = m_dirlevel
            strdircategory = m_dircat
        Catch ex As Exception
            MessageBox.Show("Error new instance.Ex-" & ex.Message)
        End Try
    End Sub

    Public Property ShopName() As String
        Get
            Return strdirname
        End Get
        Set(ByVal value As String)
            strdirname = value
        End Set
    End Property

    Public Property ShopLevel() As String
        Get
            Return strdirlevel
        End Get
        Set(ByVal value As String)
            strdirlevel = value
        End Set
    End Property
    Public Property ShopCategory() As String
        Get
            Return strdircategory
        End Get
        Set(ByVal value As String)
            strdircategory = value
        End Set
    End Property
End Class

2。我的新列表实例

MyDir = New List(Of Directory)

在我的搜索页面中,我想找一个类别,例如:food&饮料。如何查找strdircategory = "Food & Beverages"列表中的所有数据?有些页面需要按级别,名称来获取。

如果我想从列表中搜索,我是否应该再次添加列表?请指教。

编辑:

Dim filterSpecific As List(Of Directory) = MyDir.FindAll(Function(p As Directory) p.strdircategory = txtkey.Text)

1 个答案:

答案 0 :(得分:0)

找到 List(Of T)中的元素,请使用Find方法(针对单个元素):

  

列表(Of T).Find方法

     

搜索与指定谓词定义的条件匹配的元素,并返回整个List中的第一个匹配项。

FindAll(适用于所有元素):

  

列表(Of T).FindAll Method

     

检索与指定谓词定义的条件匹配的所有元素。

因此,在您的情况下,只需使用

Dim result = yourlist.FindAll(Function(d) d.strdircategory = "Food & Beverages")

您还可以使用Where扩展方法(返回惰性查询而不是新的List(Of T))。