Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

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

 

Veröffentlicht: Oktober 2016

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
)

Parameter

source
Type: System.Collections.Generic.IEnumerable<TSource>

Eine Sequenz von zu projizierenden Werten.

collectionSelector
Type: System.Func<TSource, IEnumerable<TCollection>>

Eine Transformationsfunktion, die auf jedes Element der Eingabesequenz angewendet werden soll.

resultSelector
Type: System.Func<TSource, TCollection, TResult>

Eine Transformationsfunktion, die auf jedes Element der Sequenz intermediate angewendet.

Rückgabewert

Type: System.Collections.Generic.IEnumerable<TResult>

Ein IEnumerable<T> dessen Elemente das Ergebnis eines Aufrufs der 1: n-Transformationsfunktion sind collectionSelector für jedes Element der source und die anschließende Zuordnung jedes dieser Sequenzelemente und ihrer entsprechenden Quellelemente zu einem Ergebniselement.

Typparameter

TSource

Der Typ der Elemente von source.

TCollection

Der Typ der Zwischenelemente, die von collectionSelector erfasst werden.

TResult

Der Typ der Elemente der resultierenden Sequenz.

Exception Condition
ArgumentNullException

source oder collectionSelector oder resultSelector ist null.

Diese Methode wird mit verzögerter Ausführung implementiert. Der sofortige Rückgabewert ist ein Objekt, das alle Informationen gespeichert hat, die zum Ausführen der Aktion erforderlich sind. Die von dieser Methode dargestellte Abfrage wird nicht ausgeführt, bis das Objekt aufgelistet wird, entweder durch Aufrufen der GetEnumerator -Methode direkt oder mithilfe von foreach in Visual C# oder For Each in Visual Basic.

Die SelectMany<TSource, TCollection, TResult>(IEnumerable<TSource>, Func<TSource, IEnumerable<TCollection>>, Func<TSource, TCollection, TResult>) Methode ist hilfreich, wenn Sie die Elemente zu source im Bereich Abfragelogik, die auftritt, nachdem der Aufruf von SelectMany<TSource, TCollection, TResult>(IEnumerable<TSource>, Func<TSource, IEnumerable<TCollection>>, Func<TSource, TCollection, TResult>). Ein Codebeispiel hierfür finden Sie im Beispielabschnitt. Wenn eine bidirektionale Beziehung zwischen Objekten vom Typ TSource und Objekte des Typs TCollection, d. h., wenn ein Objekt vom Typ TCollection enthält eine Eigenschaft zum Abrufen der TSource -Objekt, das es erzeugt wurde, ist es nicht erforderlich, dass die Überladung der 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>>) und navigieren Sie zurück zu den TSource -Objekt über die TCollection Objekt.

In der Abfrageausdruckssyntax jedes from -Klausel (Visual C#) oder From -Klausel (Visual Basic) nach der ersten in einen Aufruf von übersetzt SelectMany<TSource, TResult>.

Im folgenden Codebeispiel wird veranschaulicht, wie Sie SelectMany<TSource, TCollection, TResult>(IEnumerable<TSource>, Func<TSource, IEnumerable<TCollection>>, Func<TSource, TCollection, TResult>) eine 1: n-Projektion über einem Array ausführen und verwenden eine Ergebnisauswahlfunktion zu entsprechenden Elemente aus der Quellsequenz im Gültigkeitsbereich für den letzten Aufruf von Select.

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}

Universelle Windows-Plattform
Verfügbar seit 8
.NET Framework
Verfügbar seit 3.5
Portierbare Klassenbibliothek
Unterstützt in: portierbare .NET-Plattformen
Silverlight
Verfügbar seit 2.0
Windows Phone Silverlight
Verfügbar seit 7.0
Windows Phone
Verfügbar seit 8.1
Zurück zum Anfang
Anzeigen: