C#-Funktionen mit LINQ-UnterstützungC# Features That Support LINQ

Im folgenden Abschnitt werden neue Sprachkonstrukte, die in C# 3.0 eingeführt werden, vorgestellt.The following section introduces new language constructs introduced in C# 3.0. Obwohl diese neuen Funktionen zu einem gewissen Grad mit LINQLINQ-Abfragen verwendet werden, sind sie nicht beschränkt auf LINQLINQ und können in jedem Kontext, in dem Sie sie nützlich finden, verwendet werden.Although these new features are all used to a degree with LINQLINQ queries, they are not limited to LINQLINQ and can be used in any context where you find them useful.

AbfrageausdrückeQuery Expressions

Abfrageausdrücke verwenden eine deklarative Syntax wie SQL oder XQuery, um eine Abfrage über IEnumerable-Sammlungen zu erstellen.Queries expressions use a declarative syntax similar to SQL or XQuery to query over IEnumerable collections. Zur Kompilierzeit wird die Abfragesyntax in Methodenaufrufe an eine LINQLINQ-Implementierung des Anbieters der Erweiterungsmethode des Standardabfrageoperators kompiliert.At compile time query syntax is converted to method calls to a LINQLINQ provider's implementation of the standard query operator extension methods. Applikationen steuern die Standardabfrageoperatoren, die sich durch Angabe des entsprechenden Namespace mit einer using-Anweisung innerhalb des Bereichs befinden.Applications control the standard query operators that are in scope by specifying the appropriate namespace with a using directive. Der folgende Abfrageausdruck nimmt ein Array von Zeichenfolgen, gruppiert sie nach dem ersten Zeichen in der Zeichenfolge und sortiert die Gruppen.The following query expression takes an array of strings, groups them according to the first character in the string, and orders the groups.

var query = from str in stringArray  
            group str by str[0] into stringGroup  
            orderby stringGroup.Key  
            select stringGroup;  

Weitere Informationen finden Sie unter LINQ-Abfrageausdrücke.For more information, see LINQ Query Expressions.

Implizit typisierte Variablen (var)Implicitly Typed Variables (var)

Anstatt beim Deklarieren und Initialisieren einer Variablen einen Typ explizit anzugeben, können Sie den var-Modifizierer verwenden, um den Compiler zum Ableiten und Zuweisen des Typs anzuweisen, wie hier gezeigt:Instead of explicitly specifying a type when you declare and initialize a variable, you can use the var modifier to instruct the compiler to infer and assign the type, as shown here:

var number = 5;  
var name = "Virginia";  
var query = from str in stringArray  
            where str[0] == 'm'  
            select str;  

Variablen, die als var deklariert werden, sind ebenso stark typisiert wie Variablen, deren Typ Sie explizit angeben.Variables declared as var are just as strongly-typed as variables whose type you specify explicitly. Die Verwendung von var macht es möglich, anonyme Typen zu erstellen, aber es kann für jede lokale Variable verwendet werden.The use of var makes it possible to create anonymous types, but it can be used for any local variable. Arrays können auch mit impliziter Typisierung deklariert werden.Arrays can also be declared with implicit typing.

Weitere Informationen finden Sie unter Implizit typisierte lokale Variablen.For more information, see Implicitly Typed Local Variables.

Objekt- und AuflistungsinitialisiererObject and Collection Initializers

Objekt- und Auflistungsinitialisierer ermöglichen das Initialisieren von Objekten ohne expliziten Aufruf eines Konstruktors für das Objekt.Object and collection initializers make it possible to initialize objects without explicitly calling a constructor for the object. Initialisierer werden in der Regel in Abfrageausdrücken verwendet, wenn sie die Quelldaten in einen neuen Datentyp projizieren.Initializers are typically used in query expressions when they project the source data into a new data type. In einer Klasse namens Customer mit öffentlichen Name- und Phone-Eigenschaften können Objektinitialisierer wie im folgenden Code verwendet werden:Assuming a class named Customer with public Name and Phone properties, the object initializer can be used as in the following code:

Customer cust = new Customer { Name = "Mike", Phone = "555-1212" };  

Weitere Informationen finden Sie unter Objekt- und Auflistungsinitialisierer.For more information, see Object and Collection Initializers.

Anonyme TypenAnonymous Types

Ein anonymer Typ wird vom Compiler erstellt, und der Typname ist nur für den Compiler verfügbar.An anonymous type is constructed by the compiler and the type name is only available to the compiler. Anonyme Typen stellen eine bequeme Möglichkeit zum vorübergehenden Gruppieren einer Reihe von Eigenschaften in einem Abfrageergebnis bereit, ohne einen separaten benannten Typ definieren zu müssen.Anonymous types provide a convenient way to group a set of properties temporarily in a query result without having to define a separate named type. Anonyme Typen werden mit einem neuen Ausdruck und einem Objektinitialisierer initialisiert, wie hier gezeigt:Anonymous types are initialized with a new expression and an object initializer, as shown here:

select new {name = cust.Name, phone = cust.Phone};  

Weitere Informationen finden Sie unter Anonyme Typen.For more information, see Anonymous Types.

ErweiterungsmethodenExtension Methods

Eine Erweiterungsmethode ist eine statische Methode, die einem Typ zugeordnet werden kann, sodass sie aufgerufen werden kann, als ob es sich um eine Instanzmethode für den Typ handeln würde.An extension method is a static method that can be associated with a type, so that it can be called as if it were an instance method on the type. Diese Funktion ermöglicht es Ihnen, neue Methoden zu vorhandenen Typen „hinzuzufügen“, ohne sie tatsächlich zu ändern.This feature enables you to, in effect, "add" new methods to existing types without actually modifying them. Die Standardabfrageoperatoren sind eine Reihe von Erweiterungsmethoden, die LINQLINQ-Abfragefunktionen für jeden Typ bieten, der IEnumerable<T> implementiert.The standard query operators are a set of extension methods that provide LINQLINQ query functionality for any type that implements IEnumerable<T>.

Weitere Informationen finden Sie unter Erweiterungsmethoden.For more information, see Extension Methods.

Lambda-AusdrückeLambda Expressions

Ein Lambdaausdruck ist eine Inlinefunktion, die den Operator => verwendet, um Eingabeparameter vom Funktionstext zu trennen, und die zur Kompilierzeit in einen Delegaten oder eine Ausdrucksbaumstruktur konvertiert werden kann.A lambda expression is an inline function that uses the => operator to separate input parameters from the function body and can be converted at compile time to a delegate or an expression tree. In der LINQLINQ-Programmierung erhalten Sie Lambdaausdrücke, wenn Sie direkte Methodenaufrufe für die Standardabfrageoperatoren vornehmen.In LINQLINQ programming, you will encounter lambda expressions when you make direct method calls to the standard query operators.

Weitere Informationen finden Sie unter:For more information, see:

Automatisch implementierte EigenschaftenAuto-Implemented Properties

Automatisch implementierte Eigenschaften machen die Eigenschaftendeklaration präziser.Auto-implemented properties make property-declaration more concise. Wenn Sie eine Eigenschaft wie im folgenden Beispiel gezeigt deklarieren, wird der Compiler ein privates, anonymes Unterstützungsfeld erstellen, auf das nur durch die Getter und Setter der Eigenschaft zugegriffen werden kann.When you declare a property as shown in the following example, the compiler will create a private, anonymous backing field that is not accessible except through the property getter and setter.

public string Name {get; set;}  

Weitere Informationen finden Sie unter Automatisch implementierte Eigenschaften.For more information, see Auto-Implemented Properties.

Siehe auchSee Also

Language-Integrated Query (LINQ) (Sprachintegrierte Abfrage (LINQ))Language-Integrated Query (LINQ) (C#)