2013-01-18 28 views
1

我的软件旨在加密和解密文件。用户将要处理的文件加载到ListView控件中。在控件中,每个项目都是具有一个子项目的文件路径,即进程类型(ENCRYPT或DECRYPT)。如何使用LINQ获取具有特定SubItem的所有项目?

我需要获得具有“ENCRYPT”子项的所有ITEMS(文件路径)的列表,最好使用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做到这一点。

+1

不要再使用'ArrayList'。改用强类型的“List(Of T)”。 –

+0

我根本不想使用'ArrayList'或'List(Of T)'。我想为我的软件使用LINQ。但谢谢你的提示。 :) – durge

+0

你说“这不起作用”,但你不说什么没有用。 – rossisdead

回答

0

尝试下面的代码,你需要投项目ListViewItem这样您就可以访问SubItems

Dim list = From item In lvwLoad.Items.Cast(Of ListViewItem)() _ 
            Where item.SubItems(1).Text = "ENCRYPT" 
            Select item.Text 
+1

谢谢。我会记住的。只需在代码后添加'Select item.Text',它就可以很好地工作。 :) – durge

0
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 

我希望这会有所帮助。

+0

你能发表vb.net版本吗? –

+0

我更新了它,我希望这会帮助,虽然我从来没有在vb.net工作。 – ethicallogics

相关问题