Comment calculer des valeurs intermédiaires (LINQ to XML)

Cet article explique comment calculer les valeurs intermédiaires à utiliser dans le tri, le filtrage et la sélection en C# et Visual Basic.

Exemple : Utiliser la clause let pour calculer en fonction des données d’élément

L’exemple suivant utilise la clause let pour calculer les produits de valeurs numériques à partir d’éléments. Il utilise le document XML Exemple de fichier XML : données numériques.

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

Cet exemple produit la sortie suivante :

55.92
73.50
89.99
198.00
435.00

Exemple : Calculer à partir du XML qui se trouve dans un espace de noms

L’exemple suivant montre la même requête que précédemment, mais pour du XML qui se trouve dans un espace de noms. Il utilise le document XML Exemple de fichier XML : données numériques dans un espace de noms.

Pour plus d’informations, consultez Vue d’ensemble des espaces de noms.

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

Cet exemple produit la sortie suivante :

55.92
73.50
89.99
198.00
435.00

Voir aussi