Vorgehensweise: Projektieren eines neuen Typs (LINQ to XML) (C#)How to: Project a New Type (LINQ to XML) (C#)

In anderen Beispielen dieses Abschnitts wurden Abfragen gezeigt, die Ergebnisse als eine IEnumerable<T> von XElement, eine IEnumerable<T> von string und eine IEnumerable<T> von int zurückgeben.Other examples in this section have shown queries that return results as IEnumerable<T> of XElement, IEnumerable<T> of string, and IEnumerable<T> of int. Dabei handelt es sich zwar um gängige Ergebnistypen, die sich aber nicht für jedes Szenario eignen.These are common result types, but they are not appropriate for every scenario. In vielen Fällen besteht Ihr Ziel darin, dass Ihre Abfragen als eine IEnumerable<T> eines anderen Typs zurückgegeben werden.In many cases you will want your queries to return an IEnumerable<T> of some other type.

BeispielExample

In diesem Beispiel wird gezeigt, wie Sie Objekte in der select-Klausel instanziieren können.This example shows how to instantiate objects in the select clause. Der Code definiert zuerst mit einem Konstruktor eine neue Klasse und ändert anschließend die select-Anweisung so, dass der Ausdruck zu einer neuen Instanz der neuen Klasse wird.The code first defines a new class with a constructor, and then modifies the select statement so that the expression is a new instance of the new class.

Dieses Beispiel verwendet das folgende XML-Dokument: Beispiel-XML-Datei: Typische Bestellung (LINQ to XML).This example uses the following XML document: Sample XML File: Typical Purchase Order (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);  
    }  
}  

In diesem Beispiel wird die M:System.Xml.Linq.XElement.Element-Methode verwendet, die im Thema Vorgehensweise: Abrufen eines einzelnen untergeordneten Elements eingeführt wurde.This example uses the M:System.Xml.Linq.XElement.Element method that was introduced in the topic How to: Retrieve a Single Child Element (LINQ to XML) (C#). Außerdem verwendet das Beispiel Umwandlungen, um die Werte der Elemente abzurufen, die von der M:System.Xml.Linq.XElement.Element-Methode zurückgegeben werden.It also uses casts to retrieve the values of the elements that are returned by the M:System.Xml.Linq.XElement.Element method.

Dieses Beispiel erzeugt die folgende Ausgabe:This example produces the following output:

Lawnmower:1  
Baby Monitor:2  

Siehe auchSee Also

Projektionen und Transformationen (LINQ to XML) (C#)Projections and Transformations (LINQ to XML) (C#)