6

我通过这些循环填充的 ListView 导致填充了四列

// Create a ResXResourceReader
ResXResourceReader rdr0 = new ResXResourceReader(textPath1.Text + ".resx");
ResXResourceReader rdr1 = new ResXResourceReader(textPath1.Text + ".es.resx");
ResXResourceReader rdr2 = new ResXResourceReader(textPath1.Text + ".fr.resx");

foreach (DictionaryEntry d in rdr0)
{
    TransResource x = new TransResource();
    x.id = d.Key.ToString();
    x.en = d.Value.ToString();
    resources.Add(x.id, x);
}

foreach (DictionaryEntry d in rdr1)
{
    TransResource x = resources[d.Key.ToString()];
    x.fr = d.Value.ToString();
}

foreach (DictionaryEntry d in rdr2)
{
    TransResource x = resources[d.Key.ToString()];
    x.es = d.Value.ToString();
}

foreach (TransResource x in resources.Values)
{
    string[] row = { x.id, x.en, x.fr, x.es };
    var listViewItem = new ListViewItem(row);
    listResx.Items.Add(listViewItem);
}

我想要做的是根据输入的内容查询此 ListView 中的所有结果textboxQuery。如果整个列表视图中的任何字段包含来自textboxQuery我希望它显示在新列表视图中的字符串(比如说 listviewQueryresult)。我在这方面有很多失败的尝试,但我知道通过 LINQ 是可能的。

4

1 回答 1

8

因为ListView.Itemsimplements IEnumerable,但没有实现IEnumerable<T>你必须IEnumerable<ListViewItem>先将它转换为,才能使用 LINQ to Objects 查询它:

var results = listResx.Items.Cast<ListViewItem>()
                            .Where(x => YourPredicate(x));

如果整个列表视图中的任何字段包含来自 textboxQuery 的字符串,我希望它显示在新的列表视图中(比如说 listviewQueryresult)

为此,谓词只是:

var results = listResx.Items.Cast<ListViewItem>()
                            .Where(x => x.Text.Contains(textboxQuery));
于 2013-03-15T13:56:25.383 回答