LINQ to Objects 주요 특징
- Target Memory : Collection 등 메모리 내의 객체를 쿼리할 때 사용한다.
- Deferred Execution : 실제로 해당 데이터를 사용하거나 가공하기 전까지 쿼리를 처리하지 않는다.
- Filtering : where, select, order by 등을 이용하여 쉽게 데이터 필터링이 가능하다.
- Lambda Expression : 함수형 프로그래밍을 지원하기에 람다 식을 이용할 수 있다.
- Expandability : 개발자가 직접 커스텀 메서드를 정의하여 LINQ 쿼리에서 사용할 수 있다.
주요 LINQ 연산자
- Filetering : 조건에 맞는 데이터를 선택한다.
- Where : 특정 조건을 만족하는 요소를 선택한다.
private void LINQWhere()
{
var bunch = new List<int> { 1, 2, 3, 4, 5 };
var evenbunch = bunch.Where(n => n % 2 == 0).ToList(); //짝수로 필터링
//출력 결과값은 2, 4
}
- Projection : 데이터를 변형하여 다른 형태로 정의한다.
- Select : 각 요소를 변환하여 새로운 컬렉션으로 생성한다.
private void LINQProjection()
{
var bunch = new List<int> { 1, 2, 3, 4, 5 };
var squares = bunch.Select(x => x * x).ToList(); //제곱 연산으로 변형하여 Collection을 재생성
//출력 결과값은 1, 4, 9, 16, 25
}
- Ordering : 데이터를 정렬한다.
- OrderBy : 지정된 키에 따라 오름차순으로 정렬한다.
- OrderByDescending : 지정된 키에 따라 내림차순으로 정렬한다.
private void LINQOrderBy()
{
var bunch = new List<int> { 5, 3, 1, 4, 2 };
var sortedbunch = bunch.OrderBy(x => x).ToList(); //오름차순으로 정렬
}
private void LINQOrderByDescending()
{
var bunch = new List<int> { 5, 3, 1, 4, 2 };
var sortedbunch = bunch.OrderByDescending(x => x).ToList(); //내림차순으로 정렬
}
- Aggregation : 데이터를 요약한다.
- Count : Collection 내부 요소의 개수를 반환한다.
- Sum : Collection 내부 요소의 총합을 반환한다.
- Average : Collection 내부 요소의 평균을 반환한다.
private void LINQCount()
{
var bunch = new List<int> { 1, 2, 3, 4, 5 };
var count = bunch.Count(); //Collection 내부 요소의 개수 반환
}
private void LINQSum()
{
var bunch = new List<int> { 1, 2, 3, 4, 5 };
var sum = bunch.Sum(); //Collection 내부 요소의 총합 반환
}
private void LINQAverage()
{
var bunch = new List<int> { 1, 2, 3, 4, 5 };
var average = bunch.Average(); //Collection 내부 요소의 평균 반환
}
- Grouping : 데이터를 그룹으로 나눈다.
- GroupBy : 지정된 키에 따라 데이터를 그룹화한다.
private void LINQGroup()
{
var bunch = new List<string> { "lamborghini", "ferrari", "mclaren", "aston martin", "bentley" };
var groups = bunch.GroupBy(x => x[0]); //Collection 내부의 각 요소들의 첫 글자를 기준으로 그룹화
}
- Set Operations : 논리적인 집합 연산을 한다.
- Distinct : 중복된 값을 제거하고 유일한 값만 반환한다.
private void LINQDistinct()
{
var bunch = new List<int> { 1, 1, 2, 2, 2, 2, 3, 4, 5, 5, 5};
var distinct = bunch.Distinct().ToList(); //중복된 값을 제거하고 반환
}