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.IEnumerable
1[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
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
Vous devez vous connecter pour publier un commentaire.
J'échoue à VB, mais en C# que vous appelez ToList() sur le centersList et goalieList.
Donc quelque chose comme:
C'est la même chose dans VB.net.
OriginalL'auteur Alan
Toute chance que vous avez deux Joueurs de classes? Sinon, je ne vois pas comment vous pourriez peut-être obtenir ce message d'erreur.
À la recherche dans le Réflecteur, WhereSelectEnumerableIterator implémentant IEnumerable, de sorte que le casting devrait réussir.
OriginalL'auteur Igor ostrovsky