Хорошо все, я должен пропускать что-то здесь.
Каждый пример LINQ я видел VB.NET анонимные требования типов, я могу сделать что-то вроде этого:
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") }
Теперь, когда я иду для итерации через набор (см. пример ниже), я получаю ошибку, которая говорит, что "Имя "x" не объявляется.
For Each x in Infos
...
Next
Это похоже на VB.NET, не понимает, что Infos является набором анонимных типов, созданных LINQ, и хочет, чтобы я объявил "x" как некоторый тип. (Разве это не победило бы цель анонимного типа?) Я добавил ссылки на Систему. Данные. Linq и System. Данные. DataSetExtensions к моему проекту. Вот то, что я импортирую с классом:
Imports System.Linq
Imports System.Linq.Enumerable
Imports System.Linq.Queryable
Imports System.Data.Linq
Какие-либо идеи?
Наверное, не помогает, но у меня это работает в 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
Вам нужно добавить Option Infer On
перед утверждениями Imports
. Вам также может понадобиться Option Strict Off
, в зависимости от того, используете вы его или нет. Это позволяет VB.NET вычислять анонимный тип.