본문 바로가기
프로그래밍

C# LINQ 이해와 활용

by 이음코드 2024. 11. 24.
반응형

1. LINQ란 ?

LINQ( Language Integrated Query ) 로 C#에서 데이터를 쿼리하고 조작할 수 있도록 하는 기능입니다. 데이터베이스, 컬렉션, XML 등 다양한 소스를 일관된 방식으로 처리할 수 있게 합니다. 또한 LINQ는 간결한 코드 작성과 높은 가독성을 제공하며 데이터 조작을 더 쉽고 직관적으로 만듭니다.

 

2. LINQ의 구성요소

  • Query Syntax : SQL과 유사한 방식으로 데이터를 쿼리하는 구조적 문법입니다.
  • Method Syntax : 확장 메서드와 람다 표현식을 사용하는 방식입니다.
  • Data Source : LINQ는 배열, 리스트, XML, 데이터베이스 등의 다양한 소스에서 데이터를 쿼리할 수 있습니다.

3. LINQ 기본 사용법

1) Query Syntax 사용법

int[] numbers = { 1, 2, 3, 4, 5, 6 };

// 짝수만 필터링
var evenNumbers = from num in numbers
                  where num % 2 == 0
                  select num;

foreach (var num in evenNumbers)
{
    Console.WriteLine(num);
}

 

2) Method Syntax 사용법

int[] numbers = { 1, 2, 3, 4, 5, 6 };

// 짝수만 필터링
var evenNumbers = numbers.Where(num => num % 2 == 0);

foreach (var num in evenNumbers)
{
    Console.WriteLine(num);
}

 

4. LINQ의 주요 연산자

1) Filtering (필터링) : 데이터를 조건에 따라 필터링

  • where : 조건에 맞는 데이터를 필터링
var filteredData = data.Where(d => d.Age > 18);

 

2) Projection (투영) : 데이터 변환

  • Select : 각 요소를 변환하여 새로운 결과 생성
var names = data.Select(d => d.Name);

 

3) Sorting (정렬) : 데이터를 정렬

  • OrderBy, OrderByDescending
var sortedData = data.OrderBy(d => d.Name);

4) Grouping (그룹) : 데이터를 그룹으로 묶기

  • GroupBy
var groupedData = data.GroupBy(d => d.Category);

 

5) Aggregation (집계)

  • Sum, Average, Count, max, Min
var total = data.Sum(d => d.Price);

 

5. LINQ 활용

1) 리스트 필터링과 정렬

List<string> names = new List<string> { "John", "Jane", "Tom", "Anna" };

// 'J'로 시작하는 이름 필터링 후 정렬
var filteredNames = names
    .Where(name => name.StartsWith("J"))
    .OrderBy(name => name);

foreach (var name in filteredNames)
{
    Console.WriteLine(name);
}

 

2) 데이터 집계

int[] scores = { 90, 70, 50, 80, 100 };

// 평균 점수 계산
double averageScore = scores.Average();

Console.WriteLine($"평균 점수: {averageScore}");

 

3) 그룹화

var products = new List<Product>
{
    new Product { Name = "Apple", Category = "Fruit" },
    new Product { Name = "Carrot", Category = "Vegetable" },
    new Product { Name = "Banana", Category = "Fruit" }
};

// 카테고리별 그룹화
var groupedProducts = products.GroupBy(p => p.Category);

foreach (var group in groupedProducts)
{
    Console.WriteLine($"Category: {group.Key}");
    foreach (var product in group)
    {
        Console.WriteLine($" - {product.Name}");
    }
}
반응형