Vorgehensweise: Projektieren eines anonymen Typs (C#)How to: Project an Anonymous Type (C#)

Es gibt Fälle, in denen Sie eine Abfrage in einen neuen Typ projizieren möchten, obwohl Sie wissen, dass dieser Typ nur für kurze Zeit verwendet werden wird.In some cases you might want to project a query to a new type, even though you know you will only use this type for a short while. Das Erstellen eines neuen Typs für die Verwendung in der Projektion bedeutet viel Zusatzarbeit.It is a lot of extra work to create a new type just to use in the projection. Effizienter wäre es in diesem Fall, eine Projektion in einen anonymen Typ vorzunehmen.A more efficient approach in this case is to project to an anonymous type. Mit anonymen Typen können Sie eine Klasse definieren und dann ein Objekt dieser Klasse deklarieren und initialisieren, ohne der Klasse dazu einen Namen geben zu müssen.Anonymous types allow you to define a class, then declare and initialize an object of that class, without giving the class a name.

Anonyme Typen stellen die C#-Implementierung des mathematischen Konzepts eines Tupels dar.Anonymous types are the C# implementation of the mathematical concept of a tuple. Der mathematische Begriff „Tupel“ bzw. „n-Tupel“ (englisch „Tuple“) leitet sich aus dem englischen Wortbestandteil „-(t)uple“ für „-fach“ (z. B. „quadruple“ für „vierfach“ und „quintuple“ für „fünffach“) ab.The mathematical term tuple originated from the sequence single, double, triple, quadruple, quintuple, n-tuple. Er steht für eine endliche Abfolge von Objekten, die alle von einem bestimmten Typ sind.It refers to a finite sequence of objects, each of a specific type. Mitunter wird dies als Liste von Name/Wert-Paaren bezeichnet.Sometimes this is called a list of name/value pairs. So könnte z.B. der Inhalt einer Adresse im XML-Dokument in Beispiel-XML-Datei: Typische Bestellung (LINQ to XML) wie folgt ausgedrückt werden:For example, the contents of an address in the Sample XML File: Typical Purchase Order (LINQ to XML) XML document could be expressed as follows:

Name: Ellen Adams  
Street: 123 Maple Street  
City: Mill Valley  
State: CA  
Zip: 90952  
Country: USA  

Das Erstellen einer Instanz eines anonymen Typs können Sie sich wie das Erstellen eines Tupels n-ter Ordnung vorstellen.When you create an instance of an anonymous type, it is convenient to think of it as creating a tuple of order n. Wenn Sie eine Abfrage schreiben, die ein Tupel in der select-Klausel erstellt, gibt die Abfrage eine IEnumerable des Tupels zurück.If you write a query that creates a tuple in the select clause, the query returns an IEnumerable of the tuple.

BeispielExample

In diesem Beispiel projiziert die select-Klausel einen anonymen Typ.In this example, the select clause projects an anonymous type. Das Beispiel verwendet dann var, um das IEnumerable-Objekt zu erstellen.The example then uses var to create the IEnumerable object. Innerhalb der foreach-Schleife wird die Iterationsvariable zu einer Instanz des im Abfrageausdruck erstellten anonymen Typs.Within the foreach loop, the iteration variable becomes an instance of the anonymous type created in the query expression.

In diesem Beispiel wird das folgende XML-Dokument verwendet: Beispiel-XML-Datei: Kunden und Bestellungen (LINQ to XML).This example uses the following XML document: Sample XML File: Customers and Orders (LINQ to XML).

XElement custOrd = XElement.Load("CustomersOrders.xml");  
var custList =  
    from el in custOrd.Element("Customers").Elements("Customer")  
    select new {  
        CustomerID = (string)el.Attribute("CustomerID"),  
        CompanyName = (string)el.Element("CompanyName"),  
        ContactName = (string)el.Element("ContactName")  
    };  
foreach (var cust in custList)  
    Console.WriteLine("{0}:{1}:{2}", cust.CustomerID, cust.CompanyName, cust.ContactName);  

Dieser Code erzeugt die folgende Ausgabe:This code produces the following output:

GREAL:Great Lakes Food Market:Howard Snyder  
HUNGC:Hungry Coyote Import Store:Yoshi Latimer  
LAZYK:Lazy K Kountry Store:John Steel  
LETSS:Let's Stop N Shop:Jaime Yorres  

Siehe auchSee Also

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