我有一个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'.
如何解决问题?
答案 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;