Languague/C# / / 2025. 4. 1. 08:00

[C#] LINQ Select vs SelectMany 완전 정리 (차이점, 예제)

300x250

 


LINQ를 사용하다 보면 Select()는 익숙하지만, SelectMany()는 처음 보면 "이건 언제 쓰는 거지?" 싶은 경우가 있다. 두 메서드는 비슷해 보여도 동작 방식이 다르기 때문에 한 번 제대로 정리해두면 나중에 헷갈릴 일이 없다. 이번 글에서는 Select와 SelectMany의 차이를 실제 예제와 함께 비교하고, 언제 어떤 걸 써야 하는지 정리해봤다.


📚 목차

  1. Select와 SelectMany란?
  2. 기본 구조 비교
  3. 실전 예제 비교
  4. 언제 Select, 언제 SelectMany?

 

1. Select와 SelectMany란?

Select()는 컬렉션(List, 배열 등)의 각 항목을 원하는 형태로 가공해서 반환할 때 사용한다. SelectMany()는 각 항목에서 여러 개의 값을 뽑아와서, 전부 하나로 합쳐서 반환하고 싶을 때 사용한다.

  • Select() → 항목 하나 → 결과 하나
  • SelectMany() → 항목 하나 → 결과 여러 개 → 모두 한 리스트로 합치기

 

2. 기본 구조 비교

// Select
var result = items.Select(item => item.Property);

// SelectMany
var result = items.SelectMany(item => item.PropertyList);

 
Select()는 하나를 하나로 바꾸는 것
SelectMany()는 "리스트 안에 있는 값들"을 쭉 펼쳐서 하나로 만든다는 느낌


 

3. 실전 예제 비교

예제: 학생 목록 안에 과목 리스트가 있는 구조

public class Student
{
    public string Name { get; set; }
    public List<string> Subjects { get; set; }
}

var students = new List<Student>
{
    new Student { Name = "철수", Subjects = new List<string> { "수학", "과학" } },
    new Student { Name = "영희", Subjects = new List<string> { "국어", "영어" } }
};

 
✅ Select 사용

var subjectLists = students.Select(s => s.Subjects);

foreach (var subjectList in subjectLists)
{
    foreach (var subject in subjectList)
    {
        Console.WriteLine(subject); // 수학, 과학, 국어, 영어
    }
}

 

Select를 쓰면 List<List<string>> 형태가 되기 때문에 이중 반복문이 필요하다.

 

SelectMany 사용

var allSubjects = students.SelectMany(s => s.Subjects);

foreach (var subject in allSubjects)
{
    Console.WriteLine(subject); // 수학, 과학, 국어, 영어
}

 

SelectMany는 안에 있는 리스트들을 한 줄로 펼쳐서 하나의 리스트로 만들어준다.


 

4. 언제 Select? 언제 SelectMany?

상황 추천 메서드 이유
단순 값 가공 Select() 이름 변경, 속성 추출 등 1:1 매핑
리스트 안의 리스트를 한 줄로 만들기 SelectMany() 중첩된 컬렉션을 하나로 펼칠 때
DB 쿼리에서 JOIN 느낌 SelectMany() 하위 데이터까지 한 번에 조회

 

Select()는 각각의 항목을 가공할 때, SelectMany()는 안에 있는 리스트나 여러 값을 하나로 모아야 할 때 사용한다.

두 개가 비슷해 보여도 동작 방식이 다르기 때문에 한 번 개념을 정확히 정리해두면 나중에 LINQ 쓸 때 훨씬 편하다.

300x250
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유