Не может выполнить итерации набора Анонимных Типов, созданных из Запроса LINQ в VB.NET

Хорошо все, я должен пропускать что-то здесь.

Каждый пример 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

Какие-либо идеи?

5
задан Johnie Karr 14 November 2014 в 18:10
поделиться

2 ответа

Наверное, не помогает, но у меня это работает в 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
2
ответ дан 14 December 2019 в 04:35
поделиться

Вам нужно добавить Option Infer On перед утверждениями Imports. Вам также может понадобиться Option Strict Off, в зависимости от того, используете вы его или нет. Это позволяет VB.NET вычислять анонимный тип.

5
ответ дан 14 December 2019 в 04:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: