Partager via


Procédure : projeter un nouveau type (LINQ to XML)

Les autres exemples de cette section ont illustré des requêtes qui retournent des résultats comme IEnumerable<T> de XElement, IEnumerable<T> de string et IEnumerable<T> de int.Il s'agit de types de résultats courants, mais ils ne conviennent pas à chaque scénario.Dans de nombreux cas, vous souhaiterez que vos requêtes retournent un objet IEnumerable<T> d'un autre type.

Exemple

Cet exemple montre comment instancier des objets dans la clause select.Le code définit tout d'abord une nouvelle classe avec un constructeur, puis modifie l'instruction select de sorte que l'expression soit une nouvelle instance de la nouvelle classe.

Cet exemple utilise le document XML suivant : Exemple de fichier XML : Commande fournisseur typique (LINQ to XML).

class NameQty {
    public string name;
    public int qty;
    public NameQty(string n, int q)
    {
        name = n;
        qty = q;
    }
};

class Program {
    public static void Main() {
        XElement po = XElement.Load("PurchaseOrder.xml");

        IEnumerable<NameQty> nqList =
            from n in po.Descendants("Item")
            select new NameQty(
                    (string)n.Element("ProductName"),
                    (int)n.Element("Quantity")
                );

        foreach (NameQty n in nqList)
            Console.WriteLine(n.name + ":" + n.qty);
    }
}
Public Class NameQty
    Public name As String
    Public qty As Integer
    Public Sub New(ByVal n As String, ByVal q As Integer)
        name = n
        qty = q
    End Sub
End Class

Public Class Program
    Shared Sub Main()
        Dim po As XElement = XElement.Load("PurchaseOrder.xml")

        Dim nqList As IEnumerable(Of NameQty) = _
            From n In po...<Item> _
            Select New NameQty( _
                n.<ProductName>.Value, CInt(n.<Quantity>.Value))

        For Each n As NameQty In nqList
            Console.WriteLine(n.name & ":" & n.qty)
        Next
    End Sub
End Class

Cet exemple utilise la méthode M:System.Xml.Linq.XElement.Element introduite dans la rubrique Procédure : récupérer un seul élément enfant (LINQ to XML).Il utilise également des casts pour récupérer les valeurs des éléments retournés par la méthode M:System.Xml.Linq.XElement.Element.

Cet exemple produit la sortie suivante :

Lawnmower:1
Baby Monitor:2

Voir aussi

Concepts

Projections et transformations (LINQ to XML)