Linq到XML如何在vb.net中实现这一点
此代码段来自此 就我个人而言,我无法在vb.net中理解此部分的语法:Linq到XML如何在vb.net中实现这一点,vb.net,linq-to-xml,Vb.net,Linq To Xml,此代码段来自此 就我个人而言,我无法在vb.net中理解此部分的语法: Fields = report.Elements("field") .Select(**f =>** new { Name = f.Attribute("name").Value, Type = f.Attribute("type").Value }).ToArray() 我试图实现的目
Fields = report.Elements("field")
.Select(**f =>** new {
Name = f.Attribute("name").Value,
Type = f.Attribute("type").Value
}).ToArray()
我试图实现的目标-我的xml如下所示:
<items>
<item>
<id>data</id>
<foto>
<fotoname>img1.jpg</fotoname>
<fotoorder>1</fotoorder>
</foto>
<foto>
<fotoname>img2.jpg</fotoname>
<fotoorder>2</fotoorder>
</foto>
</item>
</items>
Sub Main()
Dim myXml = <items>
<item>
<id>data</id>
<foto>
<fotoname>img1.jpg</fotoname>
<fotoorder>1</fotoorder>
</foto>
<foto>
<fotoname>img2.jpg</fotoname>
<fotoorder>2</fotoorder>
</foto>
</item>
</items>
Dim fotoElementsQuery = From f In myXml...<foto> _
Select f
Dim fotoAnonymousTypeQuery = From f In myXml...<foto> _
Select f.<fotoname>.Value, f.<fotoorder>.Value
Dim fotoNamedTypeQuery = From f In myXml...<foto> _
Select New Foto With {.Name = f.<fotoname>.Value, .Order = f.<fotoorder>.Value}
End Sub
Public Class Foto
Private _name As String
Public Property Name() As String
Get
Return _name
End Get
Set(ByVal value As String)
_name = value
End Set
End Property
Private _order As Integer
Public Property Order() As Integer
Get
Return _order
End Get
Set(ByVal value As Integer)
_order = value
End Set
End Property
End Class
我需要我的对象有一个任何类型的foto元素的列表或集合。如果我是对的,我昨天读了这篇文章-我可能不是100%了解所有语法
Fields = report.Elements("field")
.Select(Function(f) new {
Name = f.Attribute("name").Value,
Type = f.Attribute("type").Value
}).ToArray()
如果我的内存正常,关键点是将f=>改为FunctionfLINQ改为XML是VB.NET提供与C完全不同语法的一个领域。您可以使用相同的方法链接,但我更喜欢VB.NET LINQ语法,如下所示:
<items>
<item>
<id>data</id>
<foto>
<fotoname>img1.jpg</fotoname>
<fotoorder>1</fotoorder>
</foto>
<foto>
<fotoname>img2.jpg</fotoname>
<fotoorder>2</fotoorder>
</foto>
</item>
</items>
Sub Main()
Dim myXml = <items>
<item>
<id>data</id>
<foto>
<fotoname>img1.jpg</fotoname>
<fotoorder>1</fotoorder>
</foto>
<foto>
<fotoname>img2.jpg</fotoname>
<fotoorder>2</fotoorder>
</foto>
</item>
</items>
Dim fotoElementsQuery = From f In myXml...<foto> _
Select f
Dim fotoAnonymousTypeQuery = From f In myXml...<foto> _
Select f.<fotoname>.Value, f.<fotoorder>.Value
Dim fotoNamedTypeQuery = From f In myXml...<foto> _
Select New Foto With {.Name = f.<fotoname>.Value, .Order = f.<fotoorder>.Value}
End Sub
Public Class Foto
Private _name As String
Public Property Name() As String
Get
Return _name
End Get
Set(ByVal value As String)
_name = value
End Set
End Property
Private _order As Integer
Public Property Order() As Integer
Get
Return _order
End Get
Set(ByVal value As Integer)
_order = value
End Set
End Property
End Class
这将提供3种不同类型的IEnumerable结果
fotoElementsQuery将采用IEnumerableOf XElement类型
fotoAnonymousTypeQuery将是IEnumerableOf类型,以充实其他一些答案: 在VB.NET中,可以使用XML轴运算符简化方法语法。例如与XElementroot.Elementschild相同。在这种情况下,子项必须直接位于根下。如果您想查找节点,而不管它们在子节点中的位置如何,您可以使用.degents而不是.Elements,或者使用下面带有三个点的VB语法:。。。。如果要访问属性,请使用@attributeName,如下所示:.@attributeName 根据Murph的回答,您可以在VB中重新编写它,如下所示:
Fields = (From f In report.<field> _
Select Name = f.@name, Type = f.@type).ToArray()
Fields = report.<field> _
.Select(Function(f) New With { _
Name = f.@name, Type = f.@type).ToArray()
这也可以使用Lambda语法编写,如下所示:
Fields = (From f In report.<field> _
Select Name = f.@name, Type = f.@type).ToArray()
Fields = report.<field> _
.Select(Function(f) New With { _
Name = f.@name, Type = f.@type).ToArray()
我想你是对的,但我还没到我该去的地方。我会澄清我的问题,你统治着人类。你有任何链接来解释这个。。。语法?我以前从未见过它。感谢您的链接,我将查看它。在VB.NET的最新版本中,您不再需要下划线行继续字符。感谢您的充实,这真的很有帮助