ItemCollection的基本LINQ表达式

时间:2009-07-21 18:24:01

标签: .net 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'.

如何解决问题?

2 个答案:

答案 0 :(得分:82)

这是因为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更严格的类型。

答案 1 :(得分:4)

您需要指定“项目”的类型

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