본문 바로가기
Programming/C#

C# LINQ 데이터 쿼리의 일관된 방식

by Dev_카페인 2024. 6. 9.
반응형

[C#] LINQ: 데이터 쿼리의 일관된 방식

안녕하세요! 이번 포스트에서는 C#의 LINQ(Language Integrated Query)에 대해 알아보겠습니다. LINQ는 C#에서 데이터 소스에 대한 쿼리를 일관된 방식으로 작성할 수 있게 해주는 강력한 기능입니다.

LINQ란 무엇인가요?

LINQ는 .NET 언어에서 데이터 쿼리를 통합하는 방법을 제공하는 기능입니다. LINQ를 사용하면 SQL과 유사한 구문을 사용하여 배열, 컬렉션, XML, 데이터베이스 등 다양한 데이터 소스에 쿼리를 작성할 수 있습니다.

LINQ의 기본 개념

LINQ는 다음과 같은 구성 요소를 포함합니다:

  • LINQ to Objects: 배열, 리스트와 같은 메모리 내 컬렉션을 쿼리할 때 사용됩니다.
  • LINQ to XML: XML 데이터를 쿼리할 때 사용됩니다.
  • LINQ to SQL: 관계형 데이터베이스를 쿼리할 때 사용됩니다.
  • LINQ to Entities: Entity Framework를 통해 데이터베이스를 쿼리할 때 사용됩니다.

LINQ의 기본 사용법

LINQ는 두 가지 구문 스타일을 제공합니다:

  1. 쿼리 식(Query Expression): SQL과 유사한 구문으로 작성됩니다.
  2. 메서드 체인(Method Chain): 메서드 호출을 체인으로 연결하여 작성됩니다.

1. LINQ 쿼리 식

int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

var evenNumbers = from num in numbers
                  where num % 2 == 0
                  select num;

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

위 예시에서 evenNumbers 쿼리는 배열 numbers에서 짝수만을 선택합니다.

2. LINQ 메서드 체인

int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

var evenNumbers = numbers.Where(num => num % 2 == 0);

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

위 예시에서 Where 메서드를 사용하여 배열 numbers에서 짝수만을 선택합니다.

LINQ의 다양한 예제

1. 배열 및 컬렉션 쿼리

LINQ는 배열 및 컬렉션에서 데이터를 쉽게 쿼리할 수 있습니다.

string[] names = { "Alice", "Bob", "Charlie", "David" };

var filteredNames = from name in names
                    where name.Length > 3
                    select name;

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

위 예시에서 filteredNames 쿼리는 문자열 배열 names에서 길이가 3보다 큰 이름만을 선택합니다.

2. 정렬 및 그룹화

LINQ는 데이터를 정렬하고 그룹화하는 기능도 제공합니다.

var sortedNames = from name in names
                  orderby name
                  select name;

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

var groupedNames = from name in names
                   group name by name.Length into nameGroup
                   select nameGroup;

foreach (var group in groupedNames)
{
    Console.WriteLine($"Length: {group.Key}");
    foreach (var name in group)
    {
        Console.WriteLine(name);
    }
}

위 예시에서 sortedNames 쿼리는 이름을 알파벳 순으로 정렬하고, groupedNames 쿼리는 이름을 길이에 따라 그룹화합니다.

3. 복잡한 객체 쿼리

LINQ는 복잡한 객체에서도 강력한 쿼리 기능을 제공합니다.

public class Student
{
    public string Name { get; set; }
    public int Age { get; set; }
}

List<Student> students = new List<Student>
{
    new Student { Name = "Alice", Age = 20 },
    new Student { Name = "Bob", Age = 22 },
    new Student { Name = "Charlie", Age = 21 }
};

var adultStudents = from student in students
                    where student.Age >= 21
                    select student;

foreach (var student in adultStudents)
{
    Console.WriteLine($"{student.Name}, {student.Age}");
}

위 예시에서 adultStudents 쿼리는 학생 목록에서 나이가 21 이상인 학생만을 선택합니다.

LINQ의 장점

LINQ를 사용하면 다음과 같은 장점을 얻을 수 있습니다:

  • 일관된 구문: 다양한 데이터 소스에 대해 동일한 구문을 사용할 수 있습니다.
  • 강력한 기능: 정렬, 그룹화, 필터링 등 강력한 쿼리 기능을 제공합니다.
  • 가독성: 쿼리 식을 사용하면 코드를 쉽게 읽고 이해할 수 있습니다.
  • 타입 안전성: 컴파일 시점에 타입 검사를 수행하여 오류를 방지할 수 있습니다.

마치며

이번 포스트에서는 C#의 LINQ(Language Integrated Query)에 대해 알아보았습니다. LINQ는 배열, 컬렉션, XML, 데이터베이스 등 다양한 데이터 소스에 대해 일관된 방식으로 쿼리를 작성할 수 있는 강력한 도구입니다. LINQ를 활용하면 데이터 쿼리를 더욱 간결하고 효율적으로 작성할 수 있습니다. 추가적인 질문이나 궁금한 점이 있다면 언제든지 댓글로 남겨주세요!

반응형