컬렉션에 새 속성을 추가하기 위한 LINQ 마스터하기

C#에서 컬렉션을 다루는 개발자라면, 데이터 표현을 개선하기 위해 컬렉션을 조작하고 정제해야 하는 상황에 직면할 수 있습니다. 일반적인 도전 과제는 객체 컬렉션에 새로운 속성을 원활하게 추가하는 것입니다. 다행히도 LINQ(Language Integrated Query)는 이 작업을 쉽고 효율적으로 만들어줍니다. 이 블로그 포스트에서는 LINQ를 사용하여 컬렉션을 매핑하고 새 속성을 추가하는 방법을 살펴보겠습니다.

도전 이해하기

문제

여러 기존 속성을 가진 객체의 컬렉션이 있다고 가정해 보세요. 원본 데이터의 무결성을 유지하면서 추가 속성을 추가해야 합니다. 각 객체에 대해 수작업으로 이를 수행하는 것은 시간 소모적이고 오류가 발생하기 쉽지만, LINQ는 이 과정을 단순화할 수 있는 강력한 구문을 제공합니다. 이 구문을 통해 효율적이고 간결하게 이 작업을 수행할 수 있습니다.

해결책: LINQ를 사용하여 새 속성 추가하기

이 문제를 해결하려면 LINQ의 간단하면서도 효과적인 쿼리 구문을 사용할 수 있습니다. 아래에서 우리는 단계별로 해결책을 분해하여 설명하겠습니다.

기본 구문

다음은 사용할 LINQ 문장의 높은 수준 개요입니다:

var a = from i in ObjectCollection select new { i.prop1, i.prop2, i.prop3, ..., newprop = newProperty };

이 문장에서 우리는 다음을 달성합니다:

  • From 절: 이 절은 우리가 쿼리하고 있는 컬렉션 ObjectCollection을 지정하는 데 사용됩니다.
  • Select 절: 여기서 우리는 새 컬렉션에 포함할 속성을 정의합니다. 기존 속성(i.prop1, i.prop2, i.prop3 등)과 함께 새 속성(newprop)을 포함할 수 있으며, 이 속성은 newProperty의 값으로 할당됩니다.

더 자세히 나눠보기

  1. 컬렉션 식별하기: 프로젝트에서 정의된 객체의 컬렉션을 가지고 있는지 확인합니다. 이는 배열, 리스트 또는 기타 열거 가능한 컬렉션일 수 있습니다.
  2. 기존 속성 결정하기: 각 객체에서 유지할 속성을 식별합니다.
  3. 새 속성 정의하기: 새 속성의 이름과 값이 무엇일지 결정합니다.
  4. LINQ 쿼리 구성하기: 위에서 제공한 LINQ 구문을 사용하여 새 속성을 추가하여 기존 컬렉션을 변환합니다.

예제 사용 사례

Name, Age, City 속성이 있는 Person 객체의 목록이 있다고 가정해 보겠습니다. 이제 사람의 나이가 18세 이상인지 확인하는 IsAdult라는 새 속성을 추가하고 싶습니다:

var people = new List<Person> {
    new Person { Name = "Alice", Age = 30, City = "New York" },
    new Person { Name = "Bob", Age = 15, City = "Los Angeles" }
};

var modifiedPeople = from person in people
                     select new {
                         person.Name,
                         person.Age,
                         person.City,
                         IsAdult = person.Age >= 18
                     };

이 예에서:

  • 우리는 각 개인에 대한 새로운 익명 객체를 만들었습니다.
  • 기존 속성(Name, Age, City)과 나이에 기반하여 사람이 성인인지 나타내는 새 속성(IsAdult)을 포함했습니다.

결론

컬렉션을 매핑하고 새 속성을 추가하기 위해 LINQ를 활용하면 데이터 조작 작업을 간소화할 수 있습니다. 이 강력한 기능은 시간을 절약할 뿐만 아니라 코드의 가독성과 유지 관리성을 향상시킵니다. LINQ 쿼리의 구문과 구조를 마스터함으로써 복잡한 데이터 변환을 쉽게 수행할 수 있습니다.

C#에서 LINQ를 사용하여 컬렉션을 효과적으로 다루는 방법을 이제 이해하셨으니, 더 깨끗하고 효율적인 코드를 작성하는 데 한 걸음 더 나아가셨습니다!