2

我的软件旨在加密和解密文件。用户将要处理的文件加载到 ListView 控件中。在控件中,每一项都是带有一个子项的文件路径,即进程的类型(ENCRYPT 或 DECRYPT)。

我需要获取具有“ENCRYPT”子项的所有项目(文件路径)的列表,最好使用 LINQ。目前,我的代码如下所示:

Dim enclist As New ArrayList()
For i As Int32 = 0 To (lvwLoad.Items.Count - 1)
    If lvwLoad.Items(i).SubItems(1).Text = "ENCRYPT" Then
        enclist.Add(lvwLoad.Items.Item(i).Text)
        count += 1
    End If
Next

我试过这个:

Dim list As IEnumerable(Of String) = From item In lvwLoad.Items 
                                     Where item.SubItems(1).Text = "ENCRYPT"

但是这个语句不能访问SubItems()数组。我知道我可能缺少一些简单的东西,但我无法弄清楚。

编辑:我知道我可以这样做:

Dim enclist As New List(Of String)
For Each item As ListViewItem In lvwLoad.Items
    If item.SubItems(1).Text = "ENCRYPT" Then
        enclist.Add(item.Text)
    End If
Next

但我真的很想知道如何用 LINQ 做到这一点。

4

2 回答 2

1
return lvwLoad.Items.Where(item => item.SubItems(1).Text = "ENCRYPT").Select(s => s.Text);

Dim list As IEnumerable(Of String) = From item In lvwLoad.Items 
                                 Where item.SubItems(1).Text = "ENCRYPT"
                                     Select item.Text

我希望这将有所帮助。

于 2013-01-18T22:06:31.690 回答
1

尝试下面的代码,您需要将项目投射到ListViewItem以便您可以访问SubItems

Dim list  = From item In lvwLoad.Items.Cast(Of ListViewItem) () _ 
                                     Where item.SubItems(1).Text = "ENCRYPT" 
                                     Select item.Text
于 2013-01-18T22:13:21.473 回答