Enumerable.SelectMany Methode

Definitie

Projecteert elk element van een reeks naar een IEnumerable<T> en plat de resulterende reeksen in één reeks.

Overloads

Name Description
SelectMany<TSource,TCollection,TResult>(IEnumerable<TSource>, Func<TSource,IEnumerable<TCollection>>, Func<TSource,TCollection,TResult>)

Projecteert elk element van een reeks naar een IEnumerable<T>, plat de resulterende reeksen in één reeks en roept een resultaatselectorfunctie aan op elk element daarin.

SelectMany<TSource,TCollection,TResult>(IEnumerable<TSource>, Func<TSource,Int32,IEnumerable<TCollection>>, Func<TSource,TCollection,TResult>)

Projecteert elk element van een reeks naar een IEnumerable<T>, plat de resulterende reeksen in één reeks en roept een resultaatselectorfunctie aan op elk element daarin. De index van elk bronelement wordt gebruikt in de tussenliggende projectvorm van dat element.

SelectMany<TSource,TResult>(IEnumerable<TSource>, Func<TSource,IEnumerable<TResult>>)

Projecteert elk element van een reeks naar een IEnumerable<T> en plat de resulterende reeksen in één reeks.

SelectMany<TSource,TResult>(IEnumerable<TSource>, Func<TSource,Int32,IEnumerable<TResult>>)

Projecteert elk element van een reeks op een IEnumerable<T>, en plat de resulterende reeksen in één reeks. De index van elk bronelement wordt gebruikt in de verwachte vorm van dat element.

SelectMany<TSource,TCollection,TResult>(IEnumerable<TSource>, Func<TSource,IEnumerable<TCollection>>, Func<TSource,TCollection,TResult>)

Projecteert elk element van een reeks naar een IEnumerable<T>, plat de resulterende reeksen in één reeks en roept een resultaatselectorfunctie aan op elk element daarin.

public:
generic <typename TSource, typename TCollection, typename TResult>
[System::Runtime::CompilerServices::Extension]
 static System::Collections::Generic::IEnumerable<TResult> ^ SelectMany(System::Collections::Generic::IEnumerable<TSource> ^ source, Func<TSource, System::Collections::Generic::IEnumerable<TCollection> ^> ^ collectionSelector, Func<TSource, TCollection, TResult> ^ resultSelector);
public static System.Collections.Generic.IEnumerable<TResult> SelectMany<TSource,TCollection,TResult>(this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,System.Collections.Generic.IEnumerable<TCollection>> collectionSelector, Func<TSource,TCollection,TResult> resultSelector);
static member SelectMany : seq<'Source> * Func<'Source, seq<'Collection>> * Func<'Source, 'Collection, 'Result> -> seq<'Result>
<Extension()>
Public Function SelectMany(Of TSource, TCollection, TResult) (source As IEnumerable(Of TSource), collectionSelector As Func(Of TSource, IEnumerable(Of TCollection)), resultSelector As Func(Of TSource, TCollection, TResult)) As IEnumerable(Of TResult)

Type parameters

TSource

Het type van de elementen van source.

TCollection

Het type van de tussenliggende elementen die door collectionSelector.

TResult

Het type van de elementen van de resulterende reeks.

Parameters

source
IEnumerable<TSource>

Een reeks waarden die moeten worden projecteren.

collectionSelector
Func<TSource,IEnumerable<TCollection>>

Een transformatiefunctie die moet worden toegepast op elk element van de invoerreeks.

resultSelector
Func<TSource,TCollection,TResult>

Een transformatiefunctie die moet worden toegepast op elk element van de tussenliggende reeks.

Retouren

IEnumerable<TResult>

Een IEnumerable<T> wiens elementen het resultaat zijn van het aanroepen van de een-op-veel-transformatiefunctie collectionSelector op elk element van source en vervolgens het toewijzen van elk van deze reekselementen en het bijbehorende bronelement aan een resultaatelement.

Uitzonderingen

source resultSelector of collectionSelector is null.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe SelectMany<TSource,TCollection,TResult>(IEnumerable<TSource>, Func<TSource,IEnumerable<TCollection>>, Func<TSource,TCollection,TResult>) u een een-op-veel-projectie uitvoert op een matrix en een resultaatselectorfunctie gebruikt om elk corresponderend element uit de bronreeks binnen het bereik van de uiteindelijke aanroep naar Selectte houden.

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}
Structure PetOwner
    Public Name As String
    Public Pets() As String
End Structure

Sub SelectManyEx3()
    ' Create an array of PetOwner objects.
    Dim petOwners() As PetOwner =
{New PetOwner With
 {.Name = "Higa", .Pets = New String() {"Scruffy", "Sam"}},
 New PetOwner With
 {.Name = "Ashkenazi", .Pets = New String() {"Walker", "Sugar"}},
 New PetOwner With
 {.Name = "Price", .Pets = New String() {"Scratches", "Diesel"}},
 New PetOwner With
 {.Name = "Hines", .Pets = New String() {"Dusty"}}}

    ' Project an anonymous type that consists of
    ' the owner's name and the pet's name (string).
    Dim query =
petOwners _
.SelectMany(
    Function(petOwner) petOwner.Pets,
    Function(petOwner, petName) New With {petOwner, petName}) _
.Where(Function(ownerAndPet) ownerAndPet.petName.StartsWith("S")) _
.Select(Function(ownerAndPet) _
       New With {.Owner = ownerAndPet.petOwner.Name,
                 .Pet = ownerAndPet.petName
       })

    Dim output As New System.Text.StringBuilder
    For Each obj In query
        output.AppendLine(String.Format("Owner={0}, Pet={1}", obj.Owner, obj.Pet))
    Next

    ' Display the output.
    Console.WriteLine(output.ToString())
End Sub

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

Opmerkingen

Deze methode wordt geïmplementeerd met behulp van de uitgestelde uitvoering. De onmiddellijke retourwaarde is een object waarin alle informatie wordt opgeslagen die nodig is om de actie uit te voeren. De query die door deze methode wordt vertegenwoordigd, wordt pas uitgevoerd nadat het object is geïnventariseerd door de methode GetEnumerator rechtstreeks aan te roepen of door foreach te gebruiken in C# of For Each in Visual Basic.

De SelectMany<TSource,TCollection,TResult>(IEnumerable<TSource>, Func<TSource,IEnumerable<TCollection>>, Func<TSource,TCollection,TResult>) methode is handig wanneer u de elementen van source het bereik van querylogica moet behouden die plaatsvinden na de aanroep naar SelectMany<TSource,TCollection,TResult>(IEnumerable<TSource>, Func<TSource,IEnumerable<TCollection>>, Func<TSource,TCollection,TResult>). Zie de sectie Voorbeeld voor een codevoorbeeld. Als er een bidirectionele relatie is tussen objecten van het type TSource en objecten van het type TCollection, dat wil weten als een object van het type TCollection een eigenschap biedt om het TSource object op te halen dat het heeft geproduceerd, hebt u deze overbelasting van SelectMany<TSource,TCollection,TResult>(IEnumerable<TSource>, Func<TSource,IEnumerable<TCollection>>, Func<TSource,TCollection,TResult>). In plaats daarvan kunt u het object gebruiken SelectMany<TSource,TResult>(IEnumerable<TSource>, Func<TSource,IEnumerable<TResult>>) en teruggaan naar het TSource object via het TCollection object.

In de syntaxis van de query-expressie wordt elke from-component (C#) of From component (Visual Basic) na de eerste component omgezet in een aanroep van SelectMany.

Zie ook

Van toepassing op

SelectMany<TSource,TCollection,TResult>(IEnumerable<TSource>, Func<TSource,Int32,IEnumerable<TCollection>>, Func<TSource,TCollection,TResult>)

Projecteert elk element van een reeks naar een IEnumerable<T>, plat de resulterende reeksen in één reeks en roept een resultaatselectorfunctie aan op elk element daarin. De index van elk bronelement wordt gebruikt in de tussenliggende projectvorm van dat element.

public:
generic <typename TSource, typename TCollection, typename TResult>
[System::Runtime::CompilerServices::Extension]
 static System::Collections::Generic::IEnumerable<TResult> ^ SelectMany(System::Collections::Generic::IEnumerable<TSource> ^ source, Func<TSource, int, System::Collections::Generic::IEnumerable<TCollection> ^> ^ collectionSelector, Func<TSource, TCollection, TResult> ^ resultSelector);
public static System.Collections.Generic.IEnumerable<TResult> SelectMany<TSource,TCollection,TResult>(this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,int,System.Collections.Generic.IEnumerable<TCollection>> collectionSelector, Func<TSource,TCollection,TResult> resultSelector);
static member SelectMany : seq<'Source> * Func<'Source, int, seq<'Collection>> * Func<'Source, 'Collection, 'Result> -> seq<'Result>
<Extension()>
Public Function SelectMany(Of TSource, TCollection, TResult) (source As IEnumerable(Of TSource), collectionSelector As Func(Of TSource, Integer, IEnumerable(Of TCollection)), resultSelector As Func(Of TSource, TCollection, TResult)) As IEnumerable(Of TResult)

Type parameters

TSource

Het type van de elementen van source.

TCollection

Het type van de tussenliggende elementen die door collectionSelector.

TResult

Het type van de elementen van de resulterende reeks.

Parameters

source
IEnumerable<TSource>

Een reeks waarden die moeten worden projecteren.

collectionSelector
Func<TSource,Int32,IEnumerable<TCollection>>

Een transformatiefunctie die moet worden toegepast op elk bronelement; de tweede parameter van de functie vertegenwoordigt de index van het bronelement.

resultSelector
Func<TSource,TCollection,TResult>

Een transformatiefunctie die moet worden toegepast op elk element van de tussenliggende reeks.

Retouren

IEnumerable<TResult>

Een IEnumerable<T> wiens elementen het resultaat zijn van het aanroepen van de een-op-veel-transformatiefunctie collectionSelector op elk element van source en vervolgens het toewijzen van elk van deze reekselementen en het bijbehorende bronelement aan een resultaatelement.

Uitzonderingen

source resultSelector of collectionSelector is null.

Opmerkingen

Deze methode wordt geïmplementeerd met behulp van de uitgestelde uitvoering. De onmiddellijke retourwaarde is een object waarin alle informatie wordt opgeslagen die nodig is om de actie uit te voeren. De query die door deze methode wordt vertegenwoordigd, wordt pas uitgevoerd nadat het object is geïnventariseerd door de methode GetEnumerator rechtstreeks aan te roepen of door foreach te gebruiken in C# of For Each in Visual Basic.

De SelectMany<TSource,TCollection,TResult>(IEnumerable<TSource>, Func<TSource,Int32,IEnumerable<TCollection>>, Func<TSource,TCollection,TResult>) methode is handig wanneer u de elementen van source het bereik van querylogica moet behouden die plaatsvinden na de aanroep naar SelectMany<TSource,TCollection,TResult>(IEnumerable<TSource>, Func<TSource,Int32,IEnumerable<TCollection>>, Func<TSource,TCollection,TResult>). Zie de sectie Voorbeeld voor een codevoorbeeld. Als er een bidirectionele relatie is tussen objecten van het type TSource en objecten van het type TCollection, dat wil weten als een object van het type TCollection een eigenschap biedt om het TSource object op te halen dat het heeft geproduceerd, hebt u deze overbelasting van SelectMany<TSource,TCollection,TResult>(IEnumerable<TSource>, Func<TSource,Int32,IEnumerable<TCollection>>, Func<TSource,TCollection,TResult>). In plaats daarvan kunt u het object gebruiken SelectMany<TSource,TResult>(IEnumerable<TSource>, Func<TSource,Int32,IEnumerable<TResult>>) en teruggaan naar het TSource object via het TCollection object.

Van toepassing op

SelectMany<TSource,TResult>(IEnumerable<TSource>, Func<TSource,IEnumerable<TResult>>)

Projecteert elk element van een reeks naar een IEnumerable<T> en plat de resulterende reeksen in één reeks.

public:
generic <typename TSource, typename TResult>
[System::Runtime::CompilerServices::Extension]
 static System::Collections::Generic::IEnumerable<TResult> ^ SelectMany(System::Collections::Generic::IEnumerable<TSource> ^ source, Func<TSource, System::Collections::Generic::IEnumerable<TResult> ^> ^ selector);
public static System.Collections.Generic.IEnumerable<TResult> SelectMany<TSource,TResult>(this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,System.Collections.Generic.IEnumerable<TResult>> selector);
static member SelectMany : seq<'Source> * Func<'Source, seq<'Result>> -> seq<'Result>
<Extension()>
Public Function SelectMany(Of TSource, TResult) (source As IEnumerable(Of TSource), selector As Func(Of TSource, IEnumerable(Of TResult))) As IEnumerable(Of TResult)

Type parameters

TSource

Het type van de elementen van source.

TResult

Het type van de elementen van de reeks die door selector.

Parameters

source
IEnumerable<TSource>

Een reeks waarden die moeten worden projecteren.

selector
Func<TSource,IEnumerable<TResult>>

Een transformatiefunctie die op elk element moet worden toegepast.

Retouren

IEnumerable<TResult>

Een IEnumerable<T> wiens elementen het resultaat zijn van het aanroepen van de een-op-veel-transformatiefunctie op elk element van de invoerreeks.

Uitzonderingen

source of selector is null.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe SelectMany<TSource,TResult>(IEnumerable<TSource>, Func<TSource,IEnumerable<TResult>>) u een een-op-veel-projectie uitvoert op een matrix.

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
*/
Structure PetOwner
    Public Name As String
    Public Pets() As String
End Structure

Sub SelectManyEx1()
    ' Create an array of PetOwner objects.
    Dim petOwners() As PetOwner =
{New PetOwner With
 {.Name = "Higa, Sidney", .Pets = New String() {"Scruffy", "Sam"}},
 New PetOwner With
 {.Name = "Ashkenazi, Ronen", .Pets = New String() {"Walker", "Sugar"}},
 New PetOwner With
 {.Name = "Price, Vernette", .Pets = New String() {"Scratches", "Diesel"}}}

    ' Call SelectMany() to gather all pets into a "flat" sequence.
    Dim query1 As IEnumerable(Of String) =
petOwners.SelectMany(Function(petOwner) petOwner.Pets)

    Dim output As New System.Text.StringBuilder("Using SelectMany():" & vbCrLf)
    ' Only one foreach loop is required to iterate through
    ' the results because it is a one-dimensional collection.
    For Each pet As String In query1
        output.AppendLine(pet)
    Next

    ' This code demonstrates how to use Select() instead
    ' of SelectMany() to get the same result.
    Dim query2 As IEnumerable(Of String()) =
petOwners.Select(Function(petOwner) petOwner.Pets)
    output.AppendLine(vbCrLf & "Using Select():")
    ' Notice that two foreach loops are required to iterate through
    ' the results because the query returns a collection of arrays.
    For Each petArray() As String In query2
        For Each pet As String In petArray
            output.AppendLine(pet)
        Next
    Next

    ' Display the output.
    Console.WriteLine(output.ToString())
End Sub

' This code produces the following output:
'
' Using SelectMany():
' Scruffy
' Sam
' Walker
' Sugar
' Scratches
' Diesel
'
' Using Select():
' Scruffy
' Sam
' Walker
' Sugar
' Scratches
' Diesel

Opmerkingen

Deze methode wordt geïmplementeerd met behulp van de uitgestelde uitvoering. De onmiddellijke retourwaarde is een object waarin alle informatie wordt opgeslagen die nodig is om de actie uit te voeren. De query die door deze methode wordt vertegenwoordigd, wordt pas uitgevoerd nadat het object is geïnventariseerd door de methode GetEnumerator rechtstreeks aan te roepen of door foreach te gebruiken in C# of For Each in Visual Basic.

De SelectMany<TSource,TResult>(IEnumerable<TSource>, Func<TSource,IEnumerable<TResult>>) methode inventariseert de invoervolgorde, maakt gebruik van een transformatiefunctie om elk element toe te wijzen aan een IEnumerable<T>en vervolgens de elementen van elk dergelijk IEnumerable<T> object op te sommen en op te geven. Dat wil gezegd dat voor elk element van source, selector wordt aangeroepen en er een reeks waarden wordt geretourneerd. SelectMany<TSource,TResult>(IEnumerable<TSource>, Func<TSource,IEnumerable<TResult>>) vervolgens wordt deze tweedimensionale verzameling verzamelingen platgemaakt in een eendimensionale IEnumerable<T> verzameling en wordt deze geretourneerd. Als een query bijvoorbeeld SelectMany<TSource,TResult>(IEnumerable<TSource>, Func<TSource,IEnumerable<TResult>>) gebruikt om de orders te verkrijgen (van het type Order) voor elke klant in een database, is het resultaat van het type IEnumerable<Order> in C# of IEnumerable(Of Order) in Visual Basic. Als de query in plaats daarvan Select gebruikt om de orders te verkrijgen, wordt de verzameling orders niet gecombineerd en is het resultaat van het type IEnumerable<List<Order>> in C# of IEnumerable(Of List(Of Order)) in Visual Basic.

In de syntaxis van de query-expressie wordt elke from-component (C#) of From component (Visual Basic) na de eerste component omgezet in een aanroep van SelectMany.

Zie ook

Van toepassing op

SelectMany<TSource,TResult>(IEnumerable<TSource>, Func<TSource,Int32,IEnumerable<TResult>>)

Projecteert elk element van een reeks op een IEnumerable<T>, en plat de resulterende reeksen in één reeks. De index van elk bronelement wordt gebruikt in de verwachte vorm van dat element.

public:
generic <typename TSource, typename TResult>
[System::Runtime::CompilerServices::Extension]
 static System::Collections::Generic::IEnumerable<TResult> ^ SelectMany(System::Collections::Generic::IEnumerable<TSource> ^ source, Func<TSource, int, System::Collections::Generic::IEnumerable<TResult> ^> ^ selector);
public static System.Collections.Generic.IEnumerable<TResult> SelectMany<TSource,TResult>(this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,int,System.Collections.Generic.IEnumerable<TResult>> selector);
static member SelectMany : seq<'Source> * Func<'Source, int, seq<'Result>> -> seq<'Result>
<Extension()>
Public Function SelectMany(Of TSource, TResult) (source As IEnumerable(Of TSource), selector As Func(Of TSource, Integer, IEnumerable(Of TResult))) As IEnumerable(Of TResult)

Type parameters

TSource

Het type van de elementen van source.

TResult

Het type van de elementen van de reeks die door selector.

Parameters

source
IEnumerable<TSource>

Een reeks waarden die moeten worden projecteren.

selector
Func<TSource,Int32,IEnumerable<TResult>>

Een transformatiefunctie die moet worden toegepast op elk bronelement; de tweede parameter van de functie vertegenwoordigt de index van het bronelement.

Retouren

IEnumerable<TResult>

Een IEnumerable<T> wiens elementen het resultaat zijn van het aanroepen van de een-op-veel-transformatiefunctie op elk element van een invoerreeks.

Uitzonderingen

source of selector is null.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe SelectMany<TSource,TResult>(IEnumerable<TSource>, Func<TSource,Int32,IEnumerable<TResult>>) u een een-op-veel-projectie uitvoert op een matrix en hoe u de index van elk buitenste element gebruikt.

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" } } };

    // Project the items in the array by appending the index
    // of each PetOwner to each pet's name in that petOwner's
    // array of pets.
    IEnumerable<string> query =
        petOwners.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
Structure PetOwner
    Public Name As String
    Public Pets() As String
End Structure

Sub SelectManyEx2()
    ' Create an array of PetOwner objects.
    Dim petOwners() As PetOwner =
{New PetOwner With
 {.Name = "Higa, Sidney", .Pets = New String() {"Scruffy", "Sam"}},
 New PetOwner With
 {.Name = "Ashkenazi, Ronen", .Pets = New String() {"Walker", "Sugar"}},
 New PetOwner With
 {.Name = "Price, Vernette", .Pets = New String() {"Scratches", "Diesel"}},
 New PetOwner With
 {.Name = "Hines, Patrick", .Pets = New String() {"Dusty"}}}

    ' Project the items in the array by appending the index
    ' of each PetOwner to each pet's name in that petOwner's
    ' array of pets.
    Dim query As IEnumerable(Of String) =
petOwners.SelectMany(Function(petOwner, index) _
                         petOwner.Pets.Select(Function(pet) _
                                                  index.ToString() + pet))

    Dim output As New System.Text.StringBuilder
    For Each pet As String In query
        output.AppendLine(pet)
    Next

    ' Display the output.
    Console.WriteLine(output.ToString())
End Sub

Opmerkingen

Deze methode wordt geïmplementeerd met behulp van de uitgestelde uitvoering. De onmiddellijke retourwaarde is een object waarin alle informatie wordt opgeslagen die nodig is om de actie uit te voeren. De query die door deze methode wordt vertegenwoordigd, wordt pas uitgevoerd nadat het object is geïnventariseerd door de methode GetEnumerator rechtstreeks aan te roepen of door foreach te gebruiken in C# of For Each in Visual Basic.

De SelectMany<TSource,TResult>(IEnumerable<TSource>, Func<TSource,Int32,IEnumerable<TResult>>) methode inventariseert de invoervolgorde, maakt gebruik van een transformatiefunctie om elk element toe te wijzen aan een IEnumerable<T>en vervolgens de elementen van elk dergelijk IEnumerable<T> object op te sommen en op te geven. Dat wil gezegd dat voor elk element van source, selector wordt aangeroepen en er een reeks waarden wordt geretourneerd. SelectMany<TSource,TResult>(IEnumerable<TSource>, Func<TSource,Int32,IEnumerable<TResult>>) vervolgens wordt deze tweedimensionale verzameling verzamelingen platgemaakt in een eendimensionale IEnumerable<T> verzameling en wordt deze geretourneerd. Als een query bijvoorbeeld SelectMany<TSource,TResult>(IEnumerable<TSource>, Func<TSource,Int32,IEnumerable<TResult>>) gebruikt om de orders te verkrijgen (van het type Order) voor elke klant in een database, is het resultaat van het type IEnumerable<Order> in C# of IEnumerable(Of Order) in Visual Basic. Als de query in plaats daarvan Select gebruikt om de orders te verkrijgen, wordt de verzameling orders niet gecombineerd en is het resultaat van het type IEnumerable<List<Order>> in C# of IEnumerable(Of List(Of Order)) in Visual Basic.

Het eerste argument dat selector het element vertegenwoordigt dat moet worden verwerkt. Het tweede argument om de op nul gebaseerde index van dat element in de bronreeks weer selector te geven. Dit kan handig zijn als de elementen zich in een bekende volgorde bevinden en u bijvoorbeeld iets wilt doen met een element in een bepaalde index. Het kan ook handig zijn als u de index van een of meer elementen wilt ophalen.

Van toepassing op