Basic LINQ expression for an ItemCollection

.net, itemcollection, linq

Solution

It's because ItemCollection only implements `IEnumerable`, not `IEnumerable<T>`.

You need to effectively call `Cast<T>()` which is what happens if you specify the type of the range variable explicitly:

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

In dot notation, this is:

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

If course, if you have a better idea of what's in the collection, you could specify a more restrictive type than `object`.

Problem

I have an `ItemCollection` that I'd like to query using LINQ. I tried the following (contrived) example: ``` var lItem = from item in lListBox.Items where String.Compare(item.ToString(), "abc") == true select item; ``` Visual Studio keeps telling me `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'.` How do I fix the problem?

Original source