728x90
LINQ에는 다양한 쿼리 연산자가 있습니다. 이 연산자들은 다음과 같이 크게 분류할 수 있습니다.
- 필터링 연산자
- 변환 연산자
- 연산자 결합
- 집계 연산자
- 순서 연산자
각각의 연산자들에 대해 자세히 살펴보겠습니다.
1. 필터링 연산자
- Where: 조건을 만족하는 요소들만 필터링합니다.
- OfType: 지정한 형식의 요소들만 필터링합니다.
- Take: 지정한 개수만큼 요소를 가져옵니다.
- TakeWhile: 지정한 조건을 만족하는 동안의 요소들을 가져옵니다.
- Skip: 지정한 개수만큼 요소를 건너뜁니다.
- SkipWhile: 지정한 조건을 만족하는 동안의 요소들을 건너뜁니다.
2. 변환 연산자
- Select: 요소를 지정한 형식으로 변환합니다.
- SelectMany: 여러 컬렉션의 요소들을 하나로 묶어서 변환합니다.
- Cast: 지정한 형식으로 요소들을 변환합니다.
- Concat: 두 컬렉션을 합쳐서 새로운 컬렉션을 만듭니다.
- Zip: 두 컬렉션을 조합하여 요소를 새로운 형식으로 만듭니다.
3. 연산자 결합
- Union: 두 컬렉션을 합쳐서 중복 요소를 제거합니다.
- Intersect: 두 컬렉션에서 공통 요소를 찾습니다.
- Except: 첫 번째 컬렉션에서 두 번째 컬렉션에 있는 요소를 제거합니다.
- GroupBy: 지정한 기준으로 요소들을 그룹화합니다.
- Join: 두 컬렉션에서 공통 필드를 기준으로 조인합니다.
- GroupJoin: 지정한 필드를 기준으로 그룹화하고, 각 그룹에서 다른 컬렉션과 조인합니다.
4. 집계 연산자
- Count: 요소의 개수를 세어줍니다.
- Sum: 요소의 합을 계산합니다.
- Average: 요소의 평균을 계산합니다.
- Min: 요소의 최솟값을 찾습니다.
- Max: 요소의 최댓값을 찾습니다.
- Aggregate: 요소를 이용해 지정한 함수를 실행합니다
5. 순서 연산자
- OrderBy/OrderByDescending : 데이터 소스의 요소를 오름차순(Asc) 또는 내림차순(Desc)으로 정렬합니다. OrderBy는 오름차순, OrderByDescending는 내림차순으로 정렬합니다.
- ThenBy/ThenByDescending : OrderBy/OrderByDescending와 함께 사용되며, 동일한 값이 있는 경우에 다른 조건으로 정렬합니다. 먼저 OrderBy/OrderByDescending로 정렬하고, 그 다음 ThenBy/ThenByDescending로 추가적으로 정렬합니다.
- Reverse : 데이터 소스의 순서를 반대로 뒤집습니다.
- Shuffle : 데이터 소스의 요소를 무작위로 섞습니다.
728x90
간단한 예시로 몇 가지를 설명드리면 아래와 같습니다.
1. 필터링 연산자
Where: numbers라는 int형 리스트에서 5보다 큰 숫자만 필터링합니다.
List<int> numbers = new List<int> { 1, 4, 6, 8, 10 };
var result = numbers.Where(n => n > 5);
Take: numbers라는 int형 리스트에서 처음 3개의 요소만 가져옵니다.
List<int> numbers = new List<int> { 1, 4, 6, 8, 10 };
var result = numbers.Take(3);
2. 변환 연산자
Select: names라는 string형 배열에서 모든 요소를 대문자로 바꿉니다.
string[] names = { "John", "Mary", "David", "Mark" };
var result = names.Select(n => n.ToUpper());
SelectMany: numbers1과 numbers2라는 두 개의 int형 리스트를 하나의 리스트로 합쳐서 반환합니다.
List<int> numbers1 = new List<int> { 1, 2, 3 };
List<int> numbers2 = new List<int> { 4, 5, 6 };
var result = numbers1.SelectMany(n => numbers2, (n1, n2) => n1 + n2);
3. 연산자 결합
Union: numbers1과 numbers2라는 두 개의 int형 리스트를 합쳐서 중복된 요소를 제거합니다.
List<int> numbers1 = new List<int> { 1, 2, 3 };
List<int> numbers2 = new List<int> { 2, 3, 4 };
var result = numbers1.Union(numbers2);
GroupBy: people이라는 Person 클래스 리스트에서 나이(age)를 기준으로 그룹화합니다.
List<Person> people = new List<Person>
{
new Person { Name = "John", Age = 25 },
new Person { Name = "Mary", Age = 30 },
new Person { Name = "David", Age = 25 },
new Person { Name = "Mark", Age = 35 },
new Person { Name = "Sarah", Age = 30 }
};
var result = people.GroupBy(p => p.Age);
4. 집계 연산자
Count: numbers라는 int형 리스트의 요소의 개수를 세어줍니다.
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
var result = numbers.Count();
Sum: numbers라는 int형 리스트의 모든 요소의 합을 계산합니다.
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
var result = numbers.Sum();
5. 순서 연산자
OrderBy: people이라는 Person 클래스 리스트를 나이(age)를 기준으로 오름차순으로 정렬합니다.
List<Person> people = new List<Person>
{
new Person { Name = "John", Age = 25 },
new Person { Name = "
728x90
'Languages > C#' 카테고리의 다른 글
C# WPF Path 그리기(3) (0) | 2023.04.18 |
---|---|
Day 13: LINQ 소개 및 사용 (0) | 2023.04.18 |
C# LINQ( Language-Integrated Query ) (0) | 2023.04.14 |
Day 12: Entity Framework 소개 및 구현 (0) | 2023.04.14 |
C# WPF Path 그리기(2) (0) | 2023.04.12 |