Подтвердить что ты не робот

Основное выражение LINQ для ItemCollection

У меня есть ItemCollection, который я бы хотел запросить с помощью LINQ. Я попробовал следующий (надуманный) пример:

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'.

Как исправить проблему?

4b9b3361

Ответ 1

Это потому, что 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.

Ответ 2

Вам нужно указать тип "item"

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