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

Queryable.SelectMany<TSource, TResult>-Methode: (IQueryable<TSource>, Expression<Func<TSource, Int32, IEnumerable<TResult>>>)

 

Veröffentlicht: Oktober 2016

Projiziert jedes Element einer Sequenz in ein IEnumerable<T> und fasst die resultierenden Sequenzen in einer einzigen Sequenz zusammen. Der Index jedes Quellelements wird im projizierten Format des jeweiligen Elements verwendet.

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

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

Parameter

source
Type: System.Linq.IQueryable<TSource>

Eine Sequenz von zu projizierenden Werten.

selector
Type: System.Linq.Expressions.Expression<Func<TSource, Int32, IEnumerable<TResult>>>

Eine Projektionsfunktion auf jedes Element angewendet werden soll. der zweite Parameter der Funktion stellt den Index des Quellelements dar.

Rückgabewert

Type: System.Linq.IQueryable<TResult>

Ein IQueryable<T> dessen Elemente das Ergebnis des Aufrufs einer 1: n-Projektionsfunktion für jedes Element der Eingabesequenz sind.

Typparameter

TSource

Der Typ der Elemente von source.

TResult

Der Typ der Elemente der Sequenz zurückgegeben von der Funktion als selector.

Exception Condition
ArgumentNullException

source oder selector ist null.

Diese Methode verfügt über mindestens einen Parameter vom Typ Expression<TDelegate> deren Typargument ist eines der Func<T, TResult> Typen. Für diese Parameter können Sie einen Lambda-Ausdruck übergeben, und es werden kompiliert, um eine Expression<TDelegate>.

Die SelectMany<TSource, TResult>(IQueryable<TSource>, Expression<Func<TSource, Int32, IEnumerable<TResult>>>) -Methode generiert eine MethodCallExpression Aufruf darstellt SelectMany<TSource, TResult>(IQueryable<TSource>, Expression<Func<TSource, Int32, IEnumerable<TResult>>>) sich selbst als konstruierte generische Methode. Anschließend übergibt der MethodCallExpression zu der CreateQuery(Expression) Methode der IQueryProvider durch dargestellt die Provider Eigenschaft der source Parameter.

Das Abfrageverhalten durch das Ausführen einer Ausdrucksbaumstruktur, die aufrufende darstellt, SelectMany<TSource, TResult>(IQueryable<TSource>, Expression<Func<TSource, Int32, IEnumerable<TResult>>>) hängt von der Implementierung des Typs der source Parameter. Wird erwartet, dass er ruft selector für jedes Element der source in ein enumerable-Formular zu projizieren. Jedes auflistbare Ergebnis umfasst den Index des Quellelements. Anschließend wird das auflistbare Ergebnisse zu einer einzigen eindimensionalen Sequenz verkettet.

Im folgenden Codebeispiel wird veranschaulicht, wie Sie SelectMany<TSource, TResult>(IQueryable<TSource>, Expression<Func<TSource, Int32, IEnumerable<TResult>>>) um eine 1: n-Projektion über einem Array ausführen und den Index jedes Quellelements verwenden.

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

public static void SelectManyEx2()
{
    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" } },
          new PetOwner { Name="Hines, Patrick", 
              Pets = new List<string>{ "Dusty" } } };

    // For each PetOwner element in the source array,
    // project a sequence of strings where each string
    // consists of the index of the PetOwner element in the
    // source array and the name of each pet in PetOwner.Pets.
    IEnumerable<string> query =
        petOwners.AsQueryable()
        .SelectMany(
        (petOwner, index) => petOwner.Pets.Select(pet => index + pet)
        );

    foreach (string pet in query)
        Console.WriteLine(pet);
}

// This code produces the following output:
//
// 0Scruffy
// 0Sam
// 1Walker
// 1Sugar
// 2Scratches
// 2Diesel
// 3Dusty

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.1
Windows Phone
Verfügbar seit 8.1
Zurück zum Anfang
Anzeigen: