[英]Unable to cast object of type 'WhereSelectEnumerableIterator'2 to Person (VB.Net)
我知道SO上还有其他线程与此错误有关,并且知道该错误意味着什么。 但是,我无法确定自己的情况下的修复代码在哪里。
我需要从API返回IEnumerable(Of Person)
。 以前,我使用了For Each
循环,但是正在研究使用更少的代码来达到相同的结果。 我不确定我在这里是否捷径过长(也许希望获得一线必杀技...)
Public Function [Get]() As IEnumerable(Of Person)
Using dt As DataTable = LoadDataTable()
Return New List(Of Person)() From {
From dr In dt.Rows Select New Person() With {
.FirstName = dr.Item("FirstName").ToString(),
.Surname = dr.Item("Surname").ToString()
}
}
End Using
End Function
错误是:
无法转换类型为“ WhereSelectEnumerableIterator`2 [System.Object,MyApp.Models.Person]”的对象来键入“ MyApp.Models.Person”
我猜想将.ToList()
扩展方法放在不同的位置,但无法正确完成。 任何人都可以建议在一次操作中是否全部可行,或者我别无选择,只能声明一个New List
变量?
为了将@Craig所说的内容放入答案中, From
期望使用逗号分隔的列表,无论您使用的是哪种类型(在本例中为Person
),而不是其他集合。
如果要从集合创建列表,则需要使用构造器:
Return New List(Of Person)(
From dr In dt.Rows Select New Person() With {
.FirstName = dr.Item("FirstName").ToString(),
.Surname = dr.Item("Surname").ToString()
}
)
但是更好的选择是只在LINQ查询上调用ToList
:
Return (From dr In dt.Rows Select New Person() With {
.FirstName = dr.Item("FirstName").ToString(),
.Surname = dr.Item("Surname").ToString()
}).ToList()
另外,如果您认为更可取,则可以使用扩展方法格式,该格式的词性要少一些:
Return dt.Rows.Select(Function(dr) New Person() With {
.FirstName = dr.Item("FirstName").ToString(),
.Surname = dr.Item("Surname").ToString()
}).ToList()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.