이 문서는 기계 번역을 이용하여 번역되었습니다. 문서를 영문으로 보려면 영문 확인란을 선택하세요. 마우스 포인터를 텍스트 위로 이동시켜 팝업 창에서 영문 텍스트를 표시할 수도 있습니다.
번역
영문

Enumerable.SelectMany<TSource, TResult> 메서드 (IEnumerable<TSource>, Func<TSource, IEnumerable<TResult>>)

 

시퀀스의 각 요소는 IEnumerable<T> 결과 시퀀스를 단일 시퀀스로 평면화 합니다.

네임스페이스:   System.Linq
어셈블리:  System.Core.dll의 System.Core

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

매개 변수

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

계산할 값의 시퀀스입니다.

selector
Type: System.Func<TSource, IEnumerable<TResult>>

각 요소에 적용할 변환 함수입니다.

반환 값

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

IEnumerable<T> 입력된 시퀀스의 각 요소에 대해 일 대 다 변환 함수를 호출한 결과로 얻어지는 요소가 있습니다.

형식 매개 변수

TSource

요소 형식의 source합니다.

TResult

반환 된 시퀀스의 요소 형식의 selector합니다.

Exception Condition
ArgumentNullException

source 또는 selectornull인 경우

이 메서드는 지연 된 실행을 사용 하 여 구현 됩니다. 즉시 반환 값은 작업을 수행 하는 데 필요한 모든 정보를 저장 하는 개체입니다. 이 방법으로 나타내는 쿼리 호출 개체가 열거 될 때까지 실행 되지 않습니다 해당 GetEnumerator 메서드를 사용 하 여 직접 또는 foreach 에서 Visual C# 또는 For Each 에 Visual Basic합니다.

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) 형식의 결과 데이터베이스에 각 고객에 대해 IEnumerable<Order> C# 또는 IEnumerable(Of Order) 에 Visual Basic합니다. 대신 쿼리를 사용 하는 경우 Select<TSource, TResult> orders를 가져오려면 주문 컬렉션의 컬렉션 결합 되지 않으며 결과 형식입니다. IEnumerable<List<Order>> C# 또는 IEnumerable(Of List(Of Order)) 에 Visual Basic합니다.

쿼리 식 구문에서 각 from 절 (Visual C#) 또는 From 절 (Visual Basic)의 호출으로 변환 하나는 초기 후 SelectMany<TSource, TResult>합니다.

다음 코드 예제에 사용 하는 방법을 보여 줍니다 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
*/

Universal Windows Platform
8 이후에 사용 가능
.NET Framework
3.5 이후에 사용 가능
Portable Class Library
portable .NET platforms에서 지원 portable .NET platforms
Silverlight
2.0 이후에 사용 가능
Windows Phone Silverlight
7.0 이후에 사용 가능
Windows Phone
8.1 이후에 사용 가능
맨 위로 이동
표시: