我是linq的新手,我正在尝试实时学习它。以下是来自我的某个应用程序的vb.net代码:
For Each k As BSPLib.ContactLib.Contact In data_org
data.Add(k.prime)
Next
其中data和data_org分别是Contact.Prime和Contact类型的Observable集合。 是否可以使用下面的linq查询执行上述操作
data = From k As BSPLib.ContactLib.Contact In data_org Select k.prime
但是上面的代码在运行时会出现以下错误:
Unable to cast object of type WhereSelectEnumerableIterator`2[BSPLib.ContactLib.Contact,BSPLib.ContactLib.ContactPrime]' to type 'System.Collections.ObjectModel.ObservableCollection`1[BSPLib.ContactLib.ContactPrime]'.
你能指导我吗?谢谢。
答案 0 :(得分:1)
您的data
变量被声明为ObservableCollection
。枚举没有隐含的转换。您必须使用这些内容创建ObservableCollection
的实例。幸运的是,你可以将它传递给构造函数。
Dim query = From k As BSPLib.ContactLib.Contact In data_org Select k.prime
data = New ObservableCollection(Of ContactPrime)(query)
答案 1 :(得分:0)
这是因为您正在从linq查询中选择k.prime。
您的查询结果将是k.prime的类型。
因此,当你试图投射foreach
时foreach k作为BSPLib.ContactLib.Contact in data_org无效,因为k是typeof(k.prime)
在上面的代码中,您必须使用
data = from k As BSPLib.ContactLib.Contact in data_org 选择k