49

ItemCollectionLINQ を使用してクエリを実行したい があります。次の(不自然な)例を試しました:

var lItem =
    from item in lListBox.Items
    where String.Compare(item.ToString(), "abc") == true
    select item;

Visual Studioは私に言い続けますCannot find an implementation of the query pattern for source type 'System.Windows.Controls.ItemCollection'. 'Where' not found. Consider explicitly specifying the type of the range variable 'item'.

問題を解決するにはどうすればよいですか?

4

2 に答える 2

92

これは、ItemCollection がIEnumerableではなくのみを実装しているためIEnumerable<T>です。

Cast<T>()範囲変数の型を明示的に指定するとどうなるかを効果的に呼び出す必要があります。

var lItem = from object item in lListBox.Items
            where String.Compare(item.ToString(), "abc") == 0
            select item;

ドット表記では、これは次のとおりです。

var lItem = lListBox.Items
                    .Cast<object>()
                    .Where(item => String.Compare(item.ToString(), "abc") == 0));

もちろん、コレクションの内容がよくわかっている場合は、より制限的な型を指定できますobject

于 2009-07-21T18:27:04.090 に答える
4

「アイテム」のタイプを指定する必要があります

var lItem =
    from object item in lListBox.Items
    where String.Compare(item.ToString(), "abc") == true
    select item;
于 2009-07-21T18:30:30.607 に答える