Share via


Cómo calcular valores intermedios (LINQ to XML)

En este artículo se muestra cómo calcular valores intermedios para usarlos en la ordenación, el filtrado y la selección en C# y en Visual Basic.

Ejemplo: Uso de la cláusula let para calcular en función de los datos de elementos

En el ejemplo siguiente se usa la cláusula let para calcular productos de valores numéricos a partir de elementos. Usa el documento XML Ejemplo de archivo XML: Datos numéricos.

XElement root = XElement.Load("Data.xml");
IEnumerable<decimal> extensions =
    from el in root.Elements("Data")
    let extension = (decimal)el.Element("Quantity") * (decimal)el.Element("Price")
    where extension >= 25
    orderby extension
    select extension;
foreach (decimal ex in extensions)
    Console.WriteLine(ex);
Dim root As XElement = XElement.Load("Data.xml")
Dim extensions As IEnumerable(Of Decimal) = _
    From el In root.<Data> _
    Let extension = CDec(el.<Quantity>.Value) * CDec(el.<Price>.Value) _
    Where extension > 25 _
    Order By extension _
    Select extension
For Each ex As Decimal In extensions
    Console.WriteLine(ex)
Next

Este ejemplo produce el siguiente resultado:

55.92
73.50
89.99
198.00
435.00

Ejemplo: Calcular a partir de un XML que se encuentra en un espacio de nombres

En el siguiente ejemplo se muestra la misma consulta que antes, pero para un XML que se encuentra en un espacio de nombres. Se utiliza el documento XML Ejemplo de archivo XML: Datos numéricos en un espacio de nombres.

Para más información, consulte Introducción a los espacios de nombres.

XElement root = XElement.Load("DataInNamespace.xml");
XNamespace ad = "http://www.adatum.com";
IEnumerable<decimal> extensions =
    from el in root.Elements(ad + "Data")
    let extension = (decimal)el.Element(ad + "Quantity") * (decimal)el.Element(ad + "Price")
    where extension >= 25
    orderby extension
    select extension;
foreach (decimal ex in extensions)
    Console.WriteLine(ex);
Imports <xmlns="http://www.adatum.com">

Module Module1
    Sub Main()
        Dim root As XElement = XElement.Load("DataInNamespace.xml")
        Dim extensions As IEnumerable(Of Decimal) = _
            From el In root.<Data> _
            Let extension = CDec(el.<Quantity>.Value) * CDec(el.<Price>.Value) _
            Where extension > 25 _
            Order By extension _
            Select extension
        For Each ex As Decimal In extensions
            Console.WriteLine(ex)
        Next
    End Sub
End Module

Este ejemplo produce el siguiente resultado:

55.92
73.50
89.99
198.00
435.00

Consulte también