繁体   English   中英

无法将类型为“ WhereSelectEnumerableIterator” 2的对象强制转换为Person(VB.Net)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM