6

私が持っているListViewは、これらのループを介して入力され、4つの列が埋められます

// 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.Itemsは実装されていますが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 に答える