(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, TResult>-Methode (IEnumerable<TSource>, Func<TSource, IEnumerable<TResult>>)

Projiziert jedes Element einer Sequenz in ein IEnumerable<T> und fasst die resultierenden Sequenzen in einer einzigen Sequenz zusammen.

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

public static IEnumerable<TResult> SelectMany<TSource, TResult>(
	this IEnumerable<TSource> source,
	Func<TSource, IEnumerable<TResult>> selector
)

Typparameter

TSource

Der Typ der Elemente von source.

TResult

Der Typ der von selector zurückgegebenen Elemente der Sequenz.

Parameter

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

Rückgabewert

Typ: System.Collections.Generic.IEnumerable<TResult>
Ein IEnumerable<T>, dessen Elemente das Ergebnis eines Aufrufs der 1:n-Transformationsfunktion für jedes Element der Eingabesequenz sind.

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 oder selector 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, TResult>(IEnumerable<TSource>, Func<TSource, IEnumerable<TResult>>)-Methode listet die Eingabesequenz auf, ordnet mithilfe einer Transformationsfunktion jedes Element einem IEnumerable<T> zu und listet dann die Elemente jedes IEnumerable<T>-Objekts auf und gibt sie zurück. Das heißt, für jedes Element von source, wird selector aufgerufen, und eine Wertesequenz wird zurückgegeben. SelectMany<TSource, TResult>(IEnumerable<TSource>, Func<TSource, IEnumerable<TResult>>) fasst dann diese zweidimensionale Auflistung von Auflistungen zu einem eindimensionalen IEnumerable<T> zusammen und gibt es zurück. Wenn beispielsweise in einer Abfrage SelectMany<TSource, TResult>(IEnumerable<TSource>, Func<TSource, IEnumerable<TResult>>) verwendet wird, um die Bestellungen (vom Typ Order) für jeden Kunden in einer Datenbank abzurufen, ist das Ergebnis vom Typ IEnumerable<Order> in C# oder IEnumerable(Of Order) in Visual Basic. Wenn stattdessen in der Abfrage Select zum Abrufen der Bestellungen verwendet wird, wird die Auflistung der Auflistungen von Bestellungen nicht zusammengefasst, und das Ergebnis ist vom Typ IEnumerable<List<Order>> in C# bzw. IEnumerable(Of List(Of Order)) in Visual Basic.

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, TResult>(IEnumerable<TSource>, Func<TSource, IEnumerable<TResult>>) eine 1:n-Projektion über einem Array ausgeführt wird.


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

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

                // Query using SelectMany().
                IEnumerable<string> query1 = petOwners.SelectMany(petOwner => petOwner.Pets);

                Console.WriteLine("Using SelectMany():");

                // Only one foreach loop is required to iterate 
                // through the results since it is a
                // one-dimensional collection.
                foreach (string pet in query1)
                {
                    Console.WriteLine(pet);
                }

                // This code shows how to use Select() 
                // instead of SelectMany().
                IEnumerable<List<String>> query2 =
                    petOwners.Select(petOwner => petOwner.Pets);

                Console.WriteLine("\nUsing Select():");

                // Notice that two foreach loops are required to 
                // iterate through the results
                // because the query returns a collection of arrays.
                foreach (List<String> petList in query2)
                {
                    foreach (string pet in petList)
                    {
                        Console.WriteLine(pet);
                    }
                    Console.WriteLine();
                }
            }

            /*
             This code produces the following output:

             Using SelectMany():
             Scruffy
             Sam
             Walker
             Sugar
             Scratches
             Diesel

             Using Select():
             Scruffy
             Sam

             Walker
             Sugar

             Scratches
             Diesel
            */



.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
Microsoft führt eine Onlineumfrage durch, um Ihre Meinung zur MSDN-Website zu erfahren. Wenn Sie sich zur Teilnahme entscheiden, wird Ihnen die Onlineumfrage angezeigt, sobald Sie die MSDN-Website verlassen.

Möchten Sie an der Umfrage teilnehmen?
Anzeigen:
© 2014 Microsoft