我在用LINQ-to-XML查询一个HTML文件。它看起来是这样的:LINQ-to-List和IEnumerable问题
<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>
我试图做的是在结构,称为玩家的列表中创建这些人喜欢的列表:
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 ([email protected] <> "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 ([email protected] <> "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)
这样我就可以查询列表,并使用它。但它踢的错误:
Unable to cast object of type 'WhereSelectEnumerableIterator
2[System.Xml.Linq.XElement,System.Collections.Generic.IEnumerable
1[Players]]' to type 'System.Collections.Generic.IEnumerable`1[Players]'
正如你所看到的,我可能真的不知道如何使用所有这些对象/类的工作。有没有人对我可能做错了什么以及我如何解决它有什么见解?
议决:LINQ查询需要返回一个IEnumerable的,就像这样:
Dim goalieList = From l In _
(From d In players.Elements _
Where d.Value = "Goalies" _
Select d.ElementsAfterSelf.TakeWhile(Function(f) [email protected] <> "role")) _
Select New Players With {.Position = "Goalie", .Name = l.Value}
然后用goalieList.ToList
您可以通过几种方法来完成此操作。我的答案是完成你想要的一种方法。您也可以使用Linq的Set操作来创建结果的联合。你也可以构造一个返回结果的查询集合, – Alan 2009-09-19 19:37:20
@Peter Mortensen:好眼睛!我已经修好了,谢谢指出。 – 2010-03-18 17:31:01
aargh,你是对的。现在修好。再次感谢 – 2010-03-18 18:47:12