Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq到XML如何在vb.net中实现这一点_Vb.net_Linq To Xml - Fatal编程技术网

Linq到XML如何在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() 我试图实现的目

此代码段来自此

就我个人而言,我无法在vb.net中理解此部分的语法:

        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=>改为Functionf

LINQ改为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的最新版本中,您不再需要下划线行继续字符。感谢您的充实,这真的很有帮助