Ваш оператор LINQ не проецируется в анонимный тип со свойством Title
.Вы получаете IEnumerable<string>
обратно напрямую.
Попробуйте вместо этого:
Dim products = From product In xml.Descendants("product") _
Select product.Element("title").Value
For Each product In products
Debug.WriteLine("Title: " & product)
Next
Тем не менее, переменная products
лучше назвать titles
.Если вы хотите проецировать в анонимный тип, вам нужно использовать With New { .Prop1 = data, .Prop2 = other }
.Точка должна быть добавлена к каждому имени свойства.Вот пример:
Dim products = From product In xml.Descendants("product") _
Select New With { .Title = product.Element("title").Value }
For Each product In products
Debug.WriteLine("Title: " & product.Title)
Next
Для вашего примера не похоже, что нужен анонимный тип.Если у вас есть несколько свойств для проецирования, это становится полезным.
РЕДАКТИРОВАТЬ: в ответ на ваш комментарий, пространство имен может быть присоединено к вашему XML.Если это так, вам нужно ссылаться на него, чтобы ссылаться на любой элемент.
Если у вашего XML есть пространство имен, ему нужно указать xmlns
, например:
<productslist xmlns="http://domain.com/namespace">
Вы бы тогданеобходимо изменить ваш код, чтобы получить пространство имен и объединить его с вашими элементами следующим образом:
Dim ns = xml.Root.GetDefaultNamespace()
Dim products = From product In xml.Descendants(ns + "product") _
Select product.Element(ns + "title").Value