Enumerable.SelectMany 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
시퀀스의 각 요소를 IEnumerable<T>에 투영하고 결과 시퀀스를 단일 시퀀스로 평면화합니다.
오버로드
SelectMany<TSource,TCollection,TResult>(IEnumerable<TSource>, Func<TSource,IEnumerable<TCollection>>, Func<TSource,TCollection,TResult>) |
시퀀스의 각 요소를 IEnumerable<T>로 투영하고, 결과 시퀀스를 단일 시퀀스로 평면화한 다음 포함된 각 요소에 대해 결과 선택기 함수를 호출합니다. |
SelectMany<TSource,TCollection,TResult>(IEnumerable<TSource>, Func<TSource,Int32,IEnumerable<TCollection>>, Func<TSource,TCollection,TResult>) |
시퀀스의 각 요소를 IEnumerable<T>로 투영하고, 결과 시퀀스를 단일 시퀀스로 평면화한 다음 포함된 각 요소에 대해 결과 선택기 함수를 호출합니다. 각 소스 요소의 인덱스는 해당 요소의 투영된 중간 폼에 사용됩니다. |
SelectMany<TSource,TResult>(IEnumerable<TSource>, Func<TSource,IEnumerable<TResult>>) |
시퀀스의 각 요소를 IEnumerable<T>에 투영하고 결과 시퀀스를 단일 시퀀스로 평면화합니다. |
SelectMany<TSource,TResult>(IEnumerable<TSource>, Func<TSource,Int32,IEnumerable<TResult>>) |
시퀀스의 각 요소를 IEnumerable<T>에 투영하고 결과 시퀀스를 단일 시퀀스로 평면화합니다. 각 소스 요소의 인덱스는 해당 요소의 투영된 폼에 사용됩니다. |
SelectMany<TSource,TCollection,TResult>(IEnumerable<TSource>, Func<TSource,IEnumerable<TCollection>>, Func<TSource,TCollection,TResult>)
- Source:
- SelectMany.cs
- Source:
- SelectMany.cs
- Source:
- SelectMany.cs
시퀀스의 각 요소를 IEnumerable<T>로 투영하고, 결과 시퀀스를 단일 시퀀스로 평면화한 다음 포함된 각 요소에 대해 결과 선택기 함수를 호출합니다.
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)
형식 매개 변수
- TSource
source
요소의 형식입니다.
- TCollection
collectionSelector
에서 수집하는 중간 요소의 형식입니다.
- TResult
결과 시퀀스 요소의 형식입니다.
매개 변수
- source
- IEnumerable<TSource>
계산할 값의 시퀀스입니다.
- collectionSelector
- Func<TSource,IEnumerable<TCollection>>
입력 시퀀스의 각 요소에 적용할 변형 함수입니다.
- resultSelector
- Func<TSource,TCollection,TResult>
중간 시퀀스의 각 요소에 적용할 변형 함수입니다.
반환
해당 요소가 collectionSelector
의 각 요소에 대해 일대다 변형 함수 source
를 호출한 다음 이러한 시퀀스 요소와 해당 소스 요소를 각각 결과 요소에 매핑한 결과인 IEnumerable<T>입니다.
예외
source
, collectionSelector
또는 resultSelector
가 null
인 경우
예제
다음 코드 예제에서는 를 사용하여 SelectMany<TSource,TCollection,TResult>(IEnumerable<TSource>, Func<TSource,IEnumerable<TCollection>>, Func<TSource,TCollection,TResult>) 배열에 대한 일대다 프로젝션을 수행하고 결과 선택기 함수를 사용하여 에 대한 최종 호출Select
을 위해 scope 원본 시퀀스에서 각 해당 요소를 유지하는 방법을 보여 줍니다.
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
설명
이 메서드는 지연 된 실행을 사용 하 여 구현 됩니다. 즉시 반환 값은 작업을 수행 하는 데 필요한 모든 정보를 저장 하는 개체입니다. 이 메서드가 나타내는 쿼리는 개체를 직접 호출 GetEnumerator
하거나 C# 또는 For Each
Visual Basic에서 를 사용하여 foreach
개체를 열거할 때까지 실행되지 않습니다.
메서드는 SelectMany<TSource,TCollection,TResult>(IEnumerable<TSource>, Func<TSource,IEnumerable<TCollection>>, Func<TSource,TCollection,TResult>) 에 대 한 호출 후 발생 하는 쿼리 논리에 대 한 scope 의 요소를 source
유지 해야 하는 경우에 유용 합니다SelectMany<TSource,TCollection,TResult>(IEnumerable<TSource>, Func<TSource,IEnumerable<TCollection>>, Func<TSource,TCollection,TResult>). 코드 예제는 예제 부분을 참조하십시오. 형식의 개체와 형식 TSource
TCollection
의 개체 간에 양방향 관계가 있는 경우, 즉 형식 TCollection
의 개체가 생성한 개체를 검색 TSource
하는 속성을 제공하는 경우 이 오버로드 SelectMany<TSource,TCollection,TResult>(IEnumerable<TSource>, Func<TSource,IEnumerable<TCollection>>, Func<TSource,TCollection,TResult>)가 필요하지 않습니다. 대신 를 사용하고 SelectMany<TSource,TResult>(IEnumerable<TSource>, Func<TSource,IEnumerable<TResult>>) 개체를 통해 TCollection
개체로 TSource
다시 이동할 수 있습니다.
쿼리 식 구문에서 초기 절 뒤의 각 from
절(C#) 또는 From
절(Visual Basic)은 의 SelectMany호출로 변환됩니다.
추가 정보
적용 대상
SelectMany<TSource,TCollection,TResult>(IEnumerable<TSource>, Func<TSource,Int32,IEnumerable<TCollection>>, Func<TSource,TCollection,TResult>)
- Source:
- SelectMany.cs
- Source:
- SelectMany.cs
- Source:
- SelectMany.cs
시퀀스의 각 요소를 IEnumerable<T>로 투영하고, 결과 시퀀스를 단일 시퀀스로 평면화한 다음 포함된 각 요소에 대해 결과 선택기 함수를 호출합니다. 각 소스 요소의 인덱스는 해당 요소의 투영된 중간 폼에 사용됩니다.
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)
형식 매개 변수
- TSource
source
요소의 형식입니다.
- TCollection
collectionSelector
에서 수집하는 중간 요소의 형식입니다.
- TResult
결과 시퀀스 요소의 형식입니다.
매개 변수
- source
- IEnumerable<TSource>
계산할 값의 시퀀스입니다.
- collectionSelector
- Func<TSource,Int32,IEnumerable<TCollection>>
각 소스 요소에 적용할 변형 함수이며, 이 함수의 두 번째 매개 변수는 소스 요소의 인덱스를 나타냅니다.
- resultSelector
- Func<TSource,TCollection,TResult>
중간 시퀀스의 각 요소에 적용할 변형 함수입니다.
반환
해당 요소가 collectionSelector
의 각 요소에 대해 일대다 변형 함수 source
를 호출한 다음 이러한 시퀀스 요소와 해당 소스 요소를 각각 결과 요소에 매핑한 결과인 IEnumerable<T>입니다.
예외
source
, collectionSelector
또는 resultSelector
가 null
인 경우
설명
이 메서드는 지연 된 실행을 사용 하 여 구현 됩니다. 즉시 반환 값은 작업을 수행 하는 데 필요한 모든 정보를 저장 하는 개체입니다. 이 메서드가 나타내는 쿼리는 개체를 직접 호출 GetEnumerator
하거나 C# 또는 For Each
Visual Basic에서 를 사용하여 foreach
개체를 열거할 때까지 실행되지 않습니다.
메서드는 SelectMany<TSource,TCollection,TResult>(IEnumerable<TSource>, Func<TSource,Int32,IEnumerable<TCollection>>, Func<TSource,TCollection,TResult>) 에 대 한 호출 후 발생 하는 쿼리 논리에 대 한 scope 의 요소를 source
유지 해야 하는 경우에 유용 합니다SelectMany<TSource,TCollection,TResult>(IEnumerable<TSource>, Func<TSource,Int32,IEnumerable<TCollection>>, Func<TSource,TCollection,TResult>). 코드 예제는 예제 부분을 참조하십시오. 형식의 개체와 형식 TSource
TCollection
의 개체 간에 양방향 관계가 있는 경우, 즉 형식 TCollection
의 개체가 생성한 개체를 검색 TSource
하는 속성을 제공하는 경우 이 오버로드 SelectMany<TSource,TCollection,TResult>(IEnumerable<TSource>, Func<TSource,Int32,IEnumerable<TCollection>>, Func<TSource,TCollection,TResult>)가 필요하지 않습니다. 대신 를 사용하고 SelectMany<TSource,TResult>(IEnumerable<TSource>, Func<TSource,Int32,IEnumerable<TResult>>) 개체를 통해 TCollection
개체로 TSource
다시 이동할 수 있습니다.
적용 대상
SelectMany<TSource,TResult>(IEnumerable<TSource>, Func<TSource,IEnumerable<TResult>>)
- Source:
- SelectMany.cs
- Source:
- SelectMany.cs
- Source:
- SelectMany.cs
시퀀스의 각 요소를 IEnumerable<T>에 투영하고 결과 시퀀스를 단일 시퀀스로 평면화합니다.
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)
형식 매개 변수
- TSource
source
요소의 형식입니다.
- TResult
selector
가 반환하는 시퀀스 요소의 형식입니다.
매개 변수
- source
- IEnumerable<TSource>
계산할 값의 시퀀스입니다.
- selector
- Func<TSource,IEnumerable<TResult>>
각 요소에 적용할 변환 함수입니다.
반환
해당 요소가 입력 시퀀스의 각 요소에 대해 일대다 변형 함수를 호출한 결과인 IEnumerable<T>입니다.
예외
source
또는 selector
가 null
인 경우
예제
다음 코드 예제에서는 를 사용하여 SelectMany<TSource,TResult>(IEnumerable<TSource>, Func<TSource,IEnumerable<TResult>>) 배열에 대한 일대다 프로젝션을 수행하는 방법을 보여 줍니다.
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
설명
이 메서드는 지연 된 실행을 사용 하 여 구현 됩니다. 즉시 반환 값은 작업을 수행 하는 데 필요한 모든 정보를 저장 하는 개체입니다. 이 메서드가 나타내는 쿼리는 개체를 직접 호출 GetEnumerator
하거나 C# 또는 For Each
Visual Basic에서 를 사용하여 foreach
개체를 열거할 때까지 실행되지 않습니다.
메서드는 SelectMany<TSource,TResult>(IEnumerable<TSource>, Func<TSource,IEnumerable<TResult>>) 입력 시퀀스를 열거하고, 변환 함수를 사용하여 각 요소를 IEnumerable<T>에 매핑한 다음, 이러한 IEnumerable<T> 각 개체의 요소를 열거하고 생성합니다. 즉, 의 각 요소에 source
selector
대해 가 호출되고 값 시퀀스가 반환됩니다. SelectMany<TSource,TResult>(IEnumerable<TSource>, Func<TSource,IEnumerable<TResult>>) 그런 다음 이 2차원 컬렉션 컬렉션을 1차원 IEnumerable<T> 으로 평면화하고 반환합니다. 예를 들어 쿼리가 를 사용하여 SelectMany<TSource,TResult>(IEnumerable<TSource>, Func<TSource,IEnumerable<TResult>>) 데이터베이스의 각 고객에 대한 주문(형식Order
)을 가져오는 경우 결과는 C# 또는 IEnumerable(Of Order)
Visual Basic 형식 IEnumerable<Order>
입니다. 대신 쿼리가 를 사용하여 Select 주문을 가져오는 경우 주문 컬렉션 컬렉션이 결합되지 않고 결과가 C# 또는 IEnumerable(Of List(Of Order))
Visual Basic 형식 IEnumerable<List<Order>>
입니다.
쿼리 식 구문에서 초기 절 뒤의 각 from
절(C#) 또는 From
절(Visual Basic)은 의 SelectMany호출로 변환됩니다.
추가 정보
적용 대상
SelectMany<TSource,TResult>(IEnumerable<TSource>, Func<TSource,Int32,IEnumerable<TResult>>)
- Source:
- SelectMany.cs
- Source:
- SelectMany.cs
- Source:
- SelectMany.cs
시퀀스의 각 요소를 IEnumerable<T>에 투영하고 결과 시퀀스를 단일 시퀀스로 평면화합니다. 각 소스 요소의 인덱스는 해당 요소의 투영된 폼에 사용됩니다.
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)
형식 매개 변수
- TSource
source
요소의 형식입니다.
- TResult
selector
가 반환하는 시퀀스 요소의 형식입니다.
매개 변수
- source
- IEnumerable<TSource>
계산할 값의 시퀀스입니다.
- selector
- Func<TSource,Int32,IEnumerable<TResult>>
각 소스 요소에 적용할 변형 함수이며, 이 함수의 두 번째 매개 변수는 소스 요소의 인덱스를 나타냅니다.
반환
해당 요소가 입력 시퀀스의 각 요소에 대해 일대다 변형 함수를 호출한 결과인 IEnumerable<T>입니다.
예외
source
또는 selector
가 null
인 경우
예제
다음 코드 예제에서는 를 사용하여 SelectMany<TSource,TResult>(IEnumerable<TSource>, Func<TSource,Int32,IEnumerable<TResult>>) 배열에 대해 일대다 프로젝션을 수행하고 각 외부 요소의 인덱스를 사용하는 방법을 보여 줍니다.
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
설명
이 메서드는 지연 된 실행을 사용 하 여 구현 됩니다. 즉시 반환 값은 작업을 수행 하는 데 필요한 모든 정보를 저장 하는 개체입니다. 이 메서드가 나타내는 쿼리는 개체를 직접 호출 GetEnumerator
하거나 C# 또는 For Each
Visual Basic에서 를 사용하여 foreach
개체를 열거할 때까지 실행되지 않습니다.
메서드는 SelectMany<TSource,TResult>(IEnumerable<TSource>, Func<TSource,Int32,IEnumerable<TResult>>) 입력 시퀀스를 열거하고, 변환 함수를 사용하여 각 요소를 IEnumerable<T>에 매핑한 다음, 이러한 IEnumerable<T> 각 개체의 요소를 열거하고 생성합니다. 즉, 의 각 요소에 source
selector
대해 가 호출되고 값 시퀀스가 반환됩니다. SelectMany<TSource,TResult>(IEnumerable<TSource>, Func<TSource,Int32,IEnumerable<TResult>>) 그런 다음 이 2차원 컬렉션 컬렉션을 1차원 IEnumerable<T> 으로 평면화하고 반환합니다. 예를 들어 쿼리가 를 사용하여 SelectMany<TSource,TResult>(IEnumerable<TSource>, Func<TSource,Int32,IEnumerable<TResult>>) 데이터베이스의 각 고객에 대한 주문(형식Order
)을 가져오는 경우 결과는 C# 또는 IEnumerable(Of Order)
Visual Basic 형식 IEnumerable<Order>
입니다. 대신 쿼리가 를 사용하여 Select 주문을 가져오는 경우 주문 컬렉션 컬렉션이 결합되지 않고 결과가 C# 또는 IEnumerable(Of List(Of Order))
Visual Basic 형식 IEnumerable<List<Order>>
입니다.
처리할 selector
요소를 나타내는 첫 번째 인수입니다. 소스 시퀀스에서 해당 요소의 인덱스(0부터 시작)를 나타내는 두 번째 인수 selector
입니다. 예를 들어 요소가 알려진 순서에 있고 특정 인덱스에서 요소를 사용하여 작업을 수행하려는 경우에 유용할 수 있습니다. 하나 이상의 요소의 인덱스 검색을 원하는 경우에도 유용할 수 있습니다.
적용 대상
.NET