LINQ는 Language-Integrated Query의 약자로, C#과 같은 .NET 언어에서 데이터 소스(컬렉션, 배열, XML, 데이터베이스 등)를 쿼리할 수 있도록 도와주는 기능이다. 즉, 데이터를 검색, 필터링, 정렬, 그룹화, 변환하는 등의 작업을 SQL과 유사한 문법으로 코드 내에서 자연스럽게 수행할 수 있게 해준다.
Where, Select, OrderBy 등)를 사용하여 체인 형태로 쿼리를 구성할 수 있어, 함수형 프로그래밍 스타일로 코드를 작성할 수 있다.다음은 LINQ를 사용하여 숫자 배열에서 짝수만 골라내고, 이를 정렬하는 간단한 예제이다.
using System;
using System.Linq;
class Program
{
static void Main()
{
int[] numbers = { 5, 3, 8, 6, 2, 10, 1 };
// LINQ 쿼리 구문을 사용한 예제
var evenNumbers = from num in numbers
where num % 2 == 0
orderby num
select num;
Console.WriteLine("짝수 리스트:");
foreach (var n in evenNumbers)
{
Console.WriteLine(n);
}
}
}
또는, 메서드 체이닝 구문으로도 동일한 결과를 얻을 수 있다.
using System;
using System.Linq;
class Program
{
static void Main()
{
int[] numbers = { 5, 3, 8, 6, 2, 10, 1 };
var evenNumbers = numbers
.Where(num => num % 2 == 0)
.OrderBy(num => num);
Console.WriteLine("짝수 리스트:");
foreach (var n in evenNumbers)
{
Console.WriteLine(n);
}
}
}
PLINQ는 Parallel LINQ의 약자로, 기존의 LINQ 기능을 병렬 처리(Parallel Processing)로 확장한 것이다. 즉, LINQ 쿼리를 여러 CPU 코어를 활용해 동시에 실행할 수 있도록 해주는 기능이다.
.AsParallel() 메서드를 추가하면 PLINQ로 전환된다.var results = myCollection.AsParallel()
.Where(x => SomeCondition(x))
.Select(x => Transform(x));위와 같이 간단하게 사용할 수 있다..AsOrdered()를 사용하여 순서를 유지할 수 있지만, 이 경우 성능상의 이점이 다소 줄어들 수 있다.using System;
using System.Linq;
class Program
{
static void Main()
{
// 예시 데이터: 1부터 1,000,000까지의 숫자 배열
var numbers = Enumerable.Range(1, 1000000).ToArray();
// PLINQ를 사용하여 짝수만 필터링하고, 제곱을 구한 후 정렬 (순서는 보장하지 않음)
var evenSquares = numbers
.AsParallel()
.Where(n => n % 2 == 0)
.Select(n => n * n)
.OrderBy(n => n)
.ToArray();
Console.WriteLine("짝수 제곱의 일부 결과:");
Console.WriteLine(string.Join(", ", evenSquares.Take(10)));
}
}
위 예제에서는 .AsParallel()을 사용해 병렬로 숫자 배열을 처리한다. 필요에 따라 .AsOrdered()를 추가해 원래 순서를 유지할 수도 있다.
여기서 순서는 보장하지 않음의 의미는 입력 데이터의 순서가 유지되지 않는다는 의미이다. 나중에 OrderBy로 정렬했기 때문에 정렬은 된다.
foreach, ToList() 호출 등)할 때이다..AsOrdered()를 명시해야 한다..AsOrdered()를 고려해야 하는데, 이 경우 성능 이점이 감소할 수 있다.AggregateException으로 Wrapping 된다.try-catch 블록으로 AggregateException을 처리하고, 내부 예외들을 살펴보는 것이 필요하다.