Condividi tramite


Come calcolare valori intermedi (LINQ to XML)

Questo articolo illustra come calcolare valori intermedi da usare per l'ordinamento, il filtro e la selezione in C# e Visual Basic.

Esempio: usare la clausola let per eseguire un calcolo in base ai dati degli elementi

Nell'esempio seguente viene utilizzata la clausola let per calcolare i prodotti di valori numerici dagli elementi. Viene usato il documento XML File XML di esempio: Dati numerici.

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

Nell'esempio viene prodotto l'output seguente:

55.92
73.50
89.99
198.00
435.00

Esempio: calcolare da XML incluso in uno spazio dei nomi

Nell'esempio seguente viene illustrata la stessa query precedente ma per XML che si trova in uno spazio dei nomi. Viene usato il documento XML File XML di esempio: Dati numerici in uno spazio dei nomi.

Per altre informazioni, vedere Panoramica degli spazi dei nomi.

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

Nell'esempio viene prodotto l'output seguente:

55.92
73.50
89.99
198.00
435.00

Vedi anche