2013-03-15 15 views
5

ListView Mam zapełnia przez te pętle w wyniku czterech kolumnach są wypełnioneodpytywanie istniejących elementów ListView z LINQ

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

Co chcę zrobić jest kwerenda wszystkich wyników w tej ListView wobec tego, co jest wpisane w textboxQuery . Jeśli dowolne pole w całym liście zawiera ciąg znaków od textboxQuery, chcę, aby był wyświetlany w nowym widoku listy (powiedzmy: listviewQueryresult). Miałem wiele nieudanych prób, ale wiem, że jest to możliwe dzięki LINQ.

Odpowiedz

6

Ponieważ ListView.Items realizuje IEnumerable, ale nie implementuje IEnumerable<T> masz do oddania go do IEnumerable<ListViewItem> pierwsze, zapytać go przy użyciu LINQ to Objects:

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

Jeśli dowolne pole w całym ListView zawiera ciąg z textboxQuery chcę aby następnie zostać wyświetlona w nowym ListView (pozwala powiedzieć listviewQueryresult)

Do tego orzeczenie byłoby po prostu:

var results = listResx.Items.Cast<ListViewItem>() 
          .Where(x => x.Text.Contains(textboxQuery)); 
+0

Nie wiem, co masz na myśli przez – rbelliv

+0

może być metodą „YourPredicate”, wyrażenie lambda. Cokolwiek zajmie obiekt 'ListViewItem' i zwróci' bool' – MarcinJuraszek

Powiązane problemy