无法迭代从VB.NET中的LINQ查询创建的匿名类型的集合

Ata*_*600 5 linq vb.net iteration anonymous-types

好的,大家好,我一定在这里错过了一些东西。

我在VB.NET匿名类型中看到的每个LINQ示例都声称我可以做这样的事情:

Dim Info As EnumerableRowCollection = pDataSet.Tables(0).AsEnumerable
Dim Infos = From a In Info _
            Select New With {
                             .Prop1 = a("Prop1"), 
                             .Prop2 = a("Prop2"), 
                             .Prop3 = a("Prop3") }
Run Code Online (Sandbox Code Playgroud)

现在,当我遍历集合时(请参见下面的示例),我得到一个错误,指出未声明“名称“ x”。

For Each x in Infos
 ...
Next 
Run Code Online (Sandbox Code Playgroud)

就像VB.NET无法理解,Infos是LINQ创建的匿名类型的集合,要我声明“ x”作为某种类型。(这是否会违背匿名类型的目的?)我已将对System.Data.Linq和System.Data.DataSetExtensions的引用添加到我的项目中。这是我在课堂上要导入的内容:

Imports System.Linq
Imports System.Linq.Enumerable
Imports System.Linq.Queryable
Imports System.Data.Linq
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

AMi*_*ico 5

您需要Option Infer OnImports语句之前添加。您可能还需要Option Strict Off取决于是否使用它。这允许VB.NET推断匿名类型。


Eri*_*ric 2

Prolly 没有帮助,但这对我在 2008 年和 2010 年有用,也许你需要 OptionInfer?

 _people.Add(New Person With {.Name = "P1", .Age = 1, .BDay = Now})
        _people.Add(New Person With {.Name = "P2", .Age = 2, .BDay = Now})
        _people.Add(New Person With {.Name = "P3", .Age = 3, .BDay = Now})
        _people.Add(New Person With {.Name = "P4", .Age = 4, .BDay = Now})
        Dim infos = From x In _people _
                    Select New With {.anonName = x.Name, .anonAge = x.Age}

        For Each anon In infos
            Debug.Print("anonName=" + anon.anonName + " anonAge=" + anon.anonAge.ToString)
        Next
Run Code Online (Sandbox Code Playgroud)