C# 루프 정리: LINQ SelectMany로 중첩 컬렉션 평탄화

발행: (2026년 1월 1일 오전 03:42 GMT+9)
2 min read
원문: Dev.to

Source: Dev.to

Introduction

리스트 안에 리스트가 있는 상황을 다루면서 데이터를 얻기 위해 복잡한 중첩 foreach 루프를 작성한 적이 있나요? C#에서는 .SelectMany 연산자를 사용하면 이러한 중첩 컬렉션을 평탄화하여 하나의 사용 가능한 스트림으로 만들 수 있는 우아한 방법을 제공합니다.

Traditional Approach

var allItems = new List();
foreach (var order in orders)
{
    foreach (var item in order.LineItems)
    {
        allItems.Add(item);
    }
}

이 방법도 동작하지만, 코드가 시끄럽고 한눈에 보기 어렵습니다.

Using SelectMany

var allItems = orders.SelectMany(o => o.LineItems).ToList();

SelectMany는 각 부모 객체에 들어가서 자식 컬렉션을 가져와 하나의 시퀀스로 펼쳐 줍니다.

Benefits

  • Readability어떻게 루프를 돌릴지보다 무엇을 하고 싶은지를 명시합니다.
  • Chainability.SelectMany 뒤에 바로 .Where(), .OrderBy() 등 다른 LINQ 연산자를 추가해 데이터를 더 세밀하게 다듬을 수 있으며, 추가적인 루프를 작성할 필요가 없습니다.

루프 중심의 스타일에서 .NET의 보다 함수형 접근 방식으로 전환하고 있다면, SelectMany는 꾸준히 활용하게 될 도구입니다!

Back to Blog

관련 글

더 보기 »

C# Smart Enums: 고급

C Smart Enums: advanced의 표지 이미지 https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-upload...

C# 스마트 Enum: 최적화

문제: “LINQ 세금” 파트 1에서는 매직 넘버를 레코드로 교체했습니다. 특정 상태를 찾기 위해 LINQ를 사용했습니다: csharp var status = Status.All.SingleOrDe...

C# .NET에 대한 나의 여정 시작

소개: 나는 아직 Python을 완전히 마스터하지 못했지만, 다음 단계로 C와 .NET을 공부하기로 결정했습니다. 대학에 다니는 동안 여러 프로그램을 탐색했습니다.