Enumerable.SelectMany Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
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
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
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
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
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.