(0) exportieren Drucken
Alle erweitern
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

Enumerable.SelectMany<TSource, TCollection, TResult>-Methode (IEnumerable<TSource>, Func<TSource, IEnumerable<TCollection>>, Func<TSource, TCollection, TResult>)

Projiziert jedes Element einer Sequenz in ein IEnumerable<T>, fasst die resultierenden Sequenzen zu einer einzigen Sequenz zusammen und ruft für jedes Element in dieser Sequenz eine Ergebnisauswahlfunktion auf.

Namespace:  System.Linq
Assembly:  System.Core (in System.Core.dll)

public static IEnumerable<TResult> SelectMany<TSource, TCollection, TResult>(
	this IEnumerable<TSource> source,
	Func<TSource, IEnumerable<TCollection>> collectionSelector,
	Func<TSource, TCollection, TResult> resultSelector
)

Typparameter

TSource

Der Typ der Elemente von source.

TCollection

Der Typ der Zwischenelemente, die von collectionSelector erfasst werden.

TResult

Der Typ der Elemente in der resultierenden Sequenz.

Parameter

source
Typ: System.Collections.Generic.IEnumerable<TSource>
Eine Sequenz von zu projizierenden Werten.
collectionSelector
Typ: System.Func<TSource, IEnumerable<TCollection>>
Eine Transformationsfunktion, die auf jedes Element der Eingabesequenz angewendet werden soll.
resultSelector
Typ: System.Func<TSource, TCollection, TResult>
Eine Transformationsfunktion, die auf jedes Element der Zwischensequenz angewendet werden soll.

Rückgabewert

Typ: System.Collections.Generic.IEnumerable<TResult>
Ein IEnumerable<T>, dessen Elemente erzeugt werden, indem für jedes Element von source die 1:n-Transformationsfunktion collectionSelector aufgerufen wird und dann jedes Element der Sequenz und sein entsprechendes Quellelement einem Ergebniselement zugeordnet wird.

Hinweis zur Verwendung

In Visual Basic und C# können Sie diese Methode als Instanzenmethode für ein beliebiges Objekt vom Typ IEnumerable<TSource> aufrufen. Bei Verwendung der Syntax für Instanzenmethoden lassen Sie den ersten Parameter aus. Weitere Informationen finden Sie unter Erweiterungsmethoden (Visual Basic) und Erweiterungsmethoden (C#-Programmierhandbuch).

AusnahmeBedingung
ArgumentNullException

source, collectionSelector oder resultSelector ist null.

Diese Methode wird mit verzögerter Ausführung implementiert. Der Wert der sofortigen Rückgabe ist ein Objekt, in dem alle zum Ausführen der Aktion erforderlichen Informationen gespeichert werden. Die von dieser Methode dargestellte Abfrage wird erst ausgeführt, wenn das Objekt entweder durch den direkten Aufruf der zugehörigen GetEnumerator-Methode oder mithilfe von foreach in Visual C# oder For Each in Visual Basic aufgelistet wird.

Die SelectMany<TSource, TCollection, TResult>(IEnumerable<TSource>, Func<TSource, IEnumerable<TCollection>>, Func<TSource, TCollection, TResult>)-Methode ist von Nutzen, wenn die Elemente von source im Gültigkeitsbereich der Abfragelogik bleiben müssen, die nach dem Aufruf von SelectMany<TSource, TCollection, TResult>(IEnumerable<TSource>, Func<TSource, IEnumerable<TCollection>>, Func<TSource, TCollection, TResult>) ausgeführt wird. Ein Codebeispiel hierfür finden Sie im Beispielabschnitt. Wenn eine bidirektionale Beziehung zwischen Objekten vom TSource und Objekten vom Typ TCollection vorhanden ist, d. h., wenn ein Objekt vom Typ TCollection eine Eigenschaft zum Abrufen des TSource-Objekts, von dem es erzeugt wurde, bereitstellt, benötigen Sie nicht diese Überladung von SelectMany<TSource, TCollection, TResult>(IEnumerable<TSource>, Func<TSource, IEnumerable<TCollection>>, Func<TSource, TCollection, TResult>). Stattdessen können Sie SelectMany<TSource, TResult>(IEnumerable<TSource>, Func<TSource, IEnumerable<TResult>>) verwenden und über das TCollection-Objekt zurück zum TSource-Objekt navigieren.

In der Abfrageausdruckssyntax wird jede from-Klausel (Visual C#) bzw. From-Klausel (Visual Basic) nach der ersten in einen Aufruf von SelectMany übersetzt.

Im folgenden Codebeispiel wird veranschaulicht, wie mithilfe von SelectMany<TSource, TCollection, TResult>(IEnumerable<TSource>, Func<TSource, IEnumerable<TCollection>>, Func<TSource, TCollection, TResult>) eine 1:n-Projektion über einem Array ausgeführt und eine Ergebnisauswahlfunktion verwendet wird, um jedes entsprechende Element aus der Quellsequenz im Gültigkeitsbereich für den letzten Aufruf von Select zu lassen.


            class PetOwner
            {
                public string Name { get; set; }
                public List<string> Pets { get; set; }
            }

            public static void SelectManyEx3()
            {
                PetOwner[] petOwners =
                    { new PetOwner { Name="Higa", 
                          Pets = new List<string>{ "Scruffy", "Sam" } },
                      new PetOwner { Name="Ashkenazi", 
                          Pets = new List<string>{ "Walker", "Sugar" } },
                      new PetOwner { Name="Price", 
                          Pets = new List<string>{ "Scratches", "Diesel" } },
                      new PetOwner { Name="Hines", 
                          Pets = new List<string>{ "Dusty" } } };

                // Project the pet owner's name and the pet's name.
                var query =
                    petOwners
                    .SelectMany(petOwner => petOwner.Pets, (petOwner, petName) => new { petOwner, petName })
                    .Where(ownerAndPet => ownerAndPet.petName.StartsWith("S"))
                    .Select(ownerAndPet =>
                            new
                            {
                                Owner = ownerAndPet.petOwner.Name,
                                Pet = ownerAndPet.petName
                            }
                    );

                // Print the results.
                foreach (var obj in query)
                {
                    Console.WriteLine(obj);
                }
            }

            // This code produces the following output:
            //
            // {Owner=Higa, Pet=Scruffy}
            // {Owner=Higa, Pet=Sam}
            // {Owner=Ashkenazi, Pet=Sugar}
            // {Owner=Price, Pet=Scratches}



.NET Framework

Unterstützt in: 4.5.2, 4.5.1, 4.5, 4, 3.5

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Portable Klassenbibliothek

Unterstützt in: Portable Klassenbibliothek

.NET für Windows Store-Apps

Unterstützt in: Windows 8

.NET für Windows Phone-Apps

Unterstützt in: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft