Я запрашиваю файл HTML с LINQ-to-XML. Это выглядит примерно так:
<html>
<body>
<div class="Players">
<div class="role">Goalies</div>
<div class="name">John Smith</div>
<div class="name">Shawn Xie</div>
<div class="role">Right Wings</div>
<div class="name">Jack Davis</div>
<div class="name">Carl Yuns</div>
<div class="name">Wayne Gortonia</div>
<div class="role">Centers</div>
<div class="name">Lutz Gaspy</div>
<div class="name">John Jacobs</div>
</div>
</body>
</html>
То, что я пытаюсь сделать, - это создать список таких людей, как в списке структур под названием Players:
Structure Players
Public Name As String
Public Position As String
End Structure
Но я быстро понял, что не знаю, что делаю, когда дело доходит до LINQ.
У меня так далеко в моих запросах:
Dim goalieList = From d In player.Elements _
Where d.Value = "Goalies" _
Select From g In d.ElementsAfterSelf _
Take While (g.@class <> "role") _
Select New Players With {.Position = "Goalie", _
.Name = g.Value}
Dim centersList = From d In player.Elements _
Where d.Value = "Centers" _
Select From g In d.ElementsAfterSelf _
Take While (g.@class <> "role") _
Select New Players With {.Position = "Centers", _
.Name = g.Value}
Что приводит меня к игрокам по позициям, но тогда я не могу ничего с этим поделать, после этого тип результата будет System.Collections.Generic.IEnumerable(Of System.Collections.Generic.IEnumerable(Of Player))
Я хочу добавить эти два результата в новый список, например:
Dim playersList As List(Of Players) = Nothing
playersList.AddRange(centersList)
playersList.AddRange(goalieList)
Так что я могу затем запросить список и использовать его. Но это пинает ошибку:
Невозможно привести объект типа
'WhereSelectEnumerableIterator 2[System.Xml.Linq.XElement,System.Collections.Generic.IEnumerable
1 [Игроки]]'
печатать
'System.Collections.Generic.IEnumerable`1 [Игроки]'
Как видите, я действительно не знаю, как работать со всеми этими объектами / классами. Кто-нибудь понимает, что я могу делать неправильно и как я могу это исправить?
RESOLVED : Запрос LINQ должен возвращать один IEnumerable, например:
Dim goalieList = From l In _
(From d In players.Elements _
Where d.Value = "Goalies" _
Select d.ElementsAfterSelf.TakeWhile(Function(f) f.@class <> "role")) _
Select New Players With {.Position = "Goalie", .Name = l.Value}
и затем используйте goalieList.ToList