2013-03-15 33 views
5

Các ListView Tôi có populates qua các vòng kết quả là bốn cột được điềntruy vấn mục ListView hiện với 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); 
} 

Những gì tôi muốn làm là truy vấn tất cả các kết quả trong ListView này chống lại những gì được nhập vào textboxQuery . Nếu bất kỳ trường nào trong toàn bộ listview chứa chuỗi từ textboxQuery Tôi muốn nó được hiển thị trong một listview mới (cho phép nói listviewQueryresult). Tôi đã có nhiều nỗ lực thất bại ở đây nhưng tôi biết nó có thể thông qua LINQ.

Trả lời

6

ListView.Items thực hiện IEnumerable, nhưng không thực hiện IEnumerable<T> bạn phải bỏ nó vào IEnumerable<ListViewItem> đầu tiên, để truy vấn nó sử dụng LINQ to Objects:

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

Nếu bất kỳ lĩnh vực trong toàn bộ listview chứa chuỗi từ textboxQuery Tôi muốn nó sau đó được hiển thị trong chế độ xem danh sách mới (cho phép nói listviewQueryresult)

Cho rằng, các vị sẽ chỉ:

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

Không chắc chính xác những gì bạn có nghĩa là bởi 'YourPredicate' – rbelliv

+0

Nó có thể là phương pháp, biểu thức lambda. Bất cứ thứ gì có đối tượng 'ListViewItem' và trả về' bool' – MarcinJuraszek