개발공부/C#

[Effective C#] 아이템 36 : 쿼리 표현식과 메서드 호출 구문이 어떻게 대응되는지 이해하라

개발자 찐빵이 2021. 12. 11. 22:17
728x90

Where()

조건을 걸어 만족하는 요소를 추려내는 필터 역할을 한다.

var smallNumbers = numbers.Where(n => n < 5);

Select()

입력값을 다른 타입으로 변환하는 용도로 사용된다.

var allNumbers = numbers.Select(n -> n);

var squares = numbers.Select(n =>
    new { Number = n, Square = n * n });

OrderBy()

정렬에 사용된다.

ThenBy()

OrderBy로 정렬 후 재 정렬이 필요할 때 사용된다.

var people = employees.Where(e => e.Age > 30).
    OrderBy(e => e.LastName).
    ThenBy(e => e.FirstName).
    ThenBy(e => e.Age);

OrderByDescending(), ThenByDescending()

내림차순으로 정렬할 때 사용된다.

var people = from e in employees
             where e.Age > 30
             orderby e.LastName descending, e.FirstName, e.Age
             select e;

GroupBy()

그룹에 대한 시퀀스를 반환한다. 그룹이란 하나의 키와 값의 리스트로 구성된 타입을 말한다.

var results = employees.GroupBy(e => e.Department).
    Select(d => new { Department = d.Key, Size = d.Count()});

SelectMany()

2개의 입력 시퀀스를 이용하여 카티전 곱(Cartesian product)을 생성한다.
첫 번째 매개변수 : 첫 번째 입력 시퀀스의 각 요소에 두 번째 입력 시퀀스 매핑한다.
두 번째 매개변수 : 두 입력 시퀀스를 이용하여 출력 시퀀스를 생성하는 함수가 온다.

int[] odds = { 1, 3, 5, 7 };
int[] evens = { 2, 4, 6, 8 };

var values = odds.SelectMany(oddNumber => evens,
    (oddNumber, evenNumber) =>
        new {
            oddNumber,
            evenNumber,
            Sum = oddNumber + evenNumber
        });

Join()

into 절이 포함되지 않은 경우 사용된다.
into 사용

var query = from num in numbers
            join label in labels on num.ToString() equals label
            select new { num, label };

Join 사용

var query = numbers.Join(labels, num => num.ToString(),
    label => label, (num, label) => new { num, label });

GroupJoin()

into 절이 포함된 경우 사용되는 Join
into 사용

var groups = from p in projects
             join t in tasks on p equals t.Parent
             into projTasks
             select new { Project = t, projTasks };

GroupJoin 사용

var groups = projects.GroupJoin(tasks,
    p => p, t => t.Parent, (p, projTasks) =>
        new { Project = p, TaskList = projTasks });
반응형