더북(TheBook)

LINQ로 사용자 정의 제네릭 개체 데이터 다루기

이번에는 LINQ를 사용하여 특정 클래스 형태의 컬렉션 데이터를 다루는 여러 가지 사용법을 알아보겠습니다. 다음 내용을 C# 인터렉티브에서 단계별로 실행해 보세요. 프로젝트 기반 소스는 LinqCollectionDemo.cs 파일입니다.

> class Car
. {
.     public string Make { get; set; }
.     public string Model { get; set; }
.     public int Year { get; set; }
. }
> class NewType
. {
.     public string Maker { get; set; }
. }
>
> List<Car> cars = new List<Car>() { //컬렉션 이니셜라이저를 사용하여 데이터 담기
.     new Car() { Make = "Camper", Model = "Camper1", Year = 2015 },
.     new Car() { Make = "Camper", Model = "Camper3", Year = 2016 },
.     new Car() { Make = "SUV", Model = "AAA", Year = 2017 },
.     new Car() { Make = "SUV", Model = "BBB", Year = 2018 },
.     new Car() { Make = "SUV", Model = "CCC", Year = 2019 },
.     new Car() { Make = "SUV", Model = "DDD", Year = 2020 }
. };
>
> //LINQ를 사용해서 Camper만 출력: select * from cars where make = 'Camper'
> var campers = from car in cars
.               where car.Make == "Camper"
.               select car;
> campers
Enumerable.WhereListIterator<Submission#4.Car> { Submission#4.Car { Make="Camper", Model="Camper1", Year=2015 }, Submission#4.Car { Make="Camper", Model="Camper3", Year=2016 } }
>
> //2015년도 이후 출시된 자동차
.               where car.Year >= 2015
.               select car;
> newCars
Enumerable.WhereListIterator<Submission#4.Car> { Submission#4.Car { Make="Camper", Model="Camper1", Year=2015 }, Submission#4.Car { Make="Camper", Model="Camper3", Year=2016 }, Submission#4.Car { Make="SUV", Model="AAA", Year=2017 }, Submission#4.Car { Make="SUV", Model="BBB", Year=2018 }, Submission#4.Car { Make="SUV", Model="CCC", Year=2019 }, Submission#4.Car { Make="SUV", Model="DDD", Year=2020 } }
>
> var orderedCars = from car in cars //가장 최근에 출시된 자동차부터 정렬
.                   orderby car.Year descending
.                   select car;
> orderedCars
OrderedEnumerable<Submission#4.Car, int> { Submission#4.Car { Make="SUV", Model="DDD", Year=2020 }, Submission#4.Car { Make="SUV", Model="CCC", Year=2019 }, Submission#4.Car { Make="SUV", Model="BBB", Year=2018 }, Submission#4.Car { Make="SUV", Model="AAA", Year=2017 }, Submission#4.Car { Make="Camper", Model="Camper3", Year=2016 }, Submission#4.Car { Make="Camper", Model="Camper1", Year=2015 } }
>
> var newObjects = from car in cars //LINQ로 새로운 개체 형식으로 반환
.                  orderby car.Year ascending
.                  select new NewType { Maker = car.Make };
> newObjects
Enumerable.WhereSelectEnumerableIterator<Submission#4.Car, Submission#5.NewType> { Submission#5.NewType { Maker="Camper" }, Submission#5.NewType { Maker="Camper" }, Submission#5.NewType { Maker="SUV" }, Submission#5.NewType { Maker="SUV" }, Submission#5.NewType { Maker="SUV" }, Submission#5.NewType { Maker="SUV" } }
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.