LINQ-to-List et IEnumerable questions

Je suis interrogation d'un fichier HTML avec LINQ-to-XML. Il ressemble à quelque chose comme ceci:

<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>

Ce que je suis en train de faire est de créer une liste de ces gens-là comme dans une liste d'une structure appelée Joueurs:

Structure Players
    Public Name As String
    Public Position As String
End Structure

Mais j'ai rapidement découvert je ne sais pas vraiment ce que je fais quand il s'agit de LINQ.

J'ai obtenu à ce point dans mes requêtes:

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}

Ce qui me fait vers le bas pour les joueurs par position, mais je ne peux pas faire grand chose avec cette par la suite le type de résultat est System.Collections.Generic.IEnumerable(Of System.Collections.Generic.IEnumerable(Of Player))

Ce que je veux faire est d'ajouter ces deux résultats une nouvelle liste, comme:

Dim playersList As List(Of Players) = Nothing
playersList.AddRange(centersList)
playersList.AddRange(goalieList)

Afin que je puisse ensuite interroger la liste et l'utiliser. Mais il donne le coup de l'erreur:

Impossible de convertir l'objet de type
'WhereSelectEnumerableIterator2[System.Xml.Linq.XElement,System.Collections.Generic.IEnumerable1[Les Joueurs]]'
de type
'Système.Les Collections.Génériques.IEnumerable`1[Les Joueurs]'

Comme vous pouvez le voir, j'ai peut vraiment avoir aucune idée de la façon de travailler avec tous ces objets/classes. Quelqu'un a une idée de ce que je fait de mal et comment je peux le résoudre?

RÉSOLU: La requête LINQ doit retourner une seule IEnumerable, comme ceci:

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}

et ensuite utiliser goalieList.ToList

Il existe plusieurs façons vous pouvez aller à ce sujet. Ma réponse ci-dessous est une manière de faire exactement ce que vous voulez. Vous pouvez également faire usage de Linq de l'Ensemble des opérations de créer un syndicat des résultats. Vous pouvez également construire une requête qui renvoie les résultats dans un ensemble,
Mortensen: Bon oeil! J'ai corrigé, merci pour cette remarque.
aargh, vous avez raison. fixe maintenant. merci encore

OriginalL'auteur Todd Main | 2009-09-19