Query existing ListView items using LINQ

ListView I fill these loops, resulting in four columns being filled

// 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);
}

What I want to do is request all the results in this ListView against what is entered in textboxQuery. If any field in the entire list contains a string from textboxQuery, I want it to appear in a new list (say listviewQueryresult). I have had many unsuccessful attempts, but I know that this is possible through LINQ.

+5
source share
1 answer

Since it ListView.Itemsimplements IEnumerable, but does not implement IEnumerable<T>, you must first pass it in IEnumerable<ListViewItem>to query it using 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));
+6

All Articles