C# Language Integrated Query


LINQ 소개 (Introduction to LINQ)

LINQ(Language Integrated Query)는 C# 언어에서 데이터 쿼리를 위한 통합된 구문을 제공하는 기능입니다. LINQ를 사용하면 다양한 데이터 소스(예: 배열, 컬렉션, XML, 데이터베이스 등)에 대해 일관된 방식으로 데이터를 쿼리하고 조작할 수 있습니다. LINQ는 쿼리 구문(Query Syntax)과 메서드 구문(Method Syntax)을 모두 지원합니다.

LINQ 기본 구문 (Basic LINQ Syntax)

LINQ 쿼리는 from, where, select 키워드를 사용하여 작성됩니다.

예제: 기본 LINQ 쿼리 (Basic LINQ Query)

using System;
using System.Linq;

namespace LINQExample
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] numbers = { 2, 4, 6, 8, 10, 12 };

            // LINQ 쿼리 구문 (Query Syntax)
            var evenNumbersQuery = from number in numbers
                                   where number % 2 == 0
                                   select number;

            Console.WriteLine("Even Numbers (Query Syntax):");
            foreach (var num in evenNumbersQuery)
            {
                Console.WriteLine(num);
            }

            // LINQ 메서드 구문 (Method Syntax)
            var evenNumbersMethod = numbers.Where(n => n % 2 == 0);

            Console.WriteLine("Even Numbers (Method Syntax):");
            foreach (var num in evenNumbersMethod)
            {
                Console.WriteLine(num);
            }
        }
    }
}

LINQ와 컬렉션 (LINQ with Collections)

LINQ는 배열뿐만 아니라 컬렉션에서도 사용할 수 있습니다.

예제: LINQ와 리스트 (LINQ with List)

using System;
using System.Collections.Generic;
using System.Linq;

namespace LINQExample
{
    class Program
    {
        static void Main(string[] args)
        {
            List<string> names = new List<string> { "Alice", "Bob", "Charlie", "David" };

            // 이름이 'B'로 시작하는 이름 필터링 (Filtering names starting with 'B')
            var filteredNames = from name in names
                                where name.StartsWith("B")
                                select name;

            Console.WriteLine("Names starting with 'B':");
            foreach (var name in filteredNames)
            {
                Console.WriteLine(name);
            }
        }
    }
}

LINQ 연산자 (LINQ Operators)

LINQ에는 다양한 연산자가 있습니다. 이들 연산자는 필터링, 정렬, 그룹화, 조인 등을 수행할 수 있습니다.

예제: LINQ 연산자 사용 (Using LINQ Operators)

using System;
using System.Linq;

namespace LINQExample
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

            // 필터링 (Filtering)
            var evenNumbers = numbers.Where(n => n % 2 == 0);

            // 정렬 (Sorting)
            var sortedNumbers = numbers.OrderByDescending(n => n);

            // 선택 (Selecting)
            var squaredNumbers = numbers.Select(n => n * n);

            // 출력 (Output)
            Console.WriteLine("Even Numbers:");
            foreach (var num in evenNumbers)
            {
                Console.WriteLine(num);
            }

            Console.WriteLine("Sorted Numbers:");
            foreach (var num in sortedNumbers)
            {
                Console.WriteLine(num);
            }

            Console.WriteLine("Squared Numbers:");
            foreach (var num in squaredNumbers)
            {
                Console.WriteLine(num);
            }
        }
    }
}

LINQ와 데이터베이스 (LINQ with Database)

LINQ는 데이터베이스와도 통합할 수 있습니다. LINQ to SQL이나 Entity Framework를 사용하면 SQL 데이터베이스를 쿼리할 수 있습니다.

예제: Entity Framework를 사용한 LINQ (LINQ with Entity Framework)

using System;
using System.Linq;
using System.Data.Entity;

namespace LINQExample
{
    public class Product
    {
        public int ProductId { get; set; }
        public string Name { get; set; }
        public decimal Price { get; set; }
    }

    public class ProductContext : DbContext
    {
        public DbSet<Product> Products { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            using (var context = new ProductContext())
            {
                // 데이터베이스에서 50달러 이상인 제품 검색 (Querying products with price over 50 dollars)
                var expensiveProducts = from product in context.Products
                                        where product.Price > 50
                                        select product;

                Console.WriteLine("Expensive Products:");
                foreach (var product in expensiveProducts)
                {
                    Console.WriteLine($"{product.Name}: ${product.Price}");
                }
            }
        }
    }
}

LINQ와 XML (LINQ to XML)

LINQ를 사용하여 XML 데이터를 쿼리하고 조작할 수 있습니다.

예제: LINQ to XML

using System;
using System.Linq;
using System.Xml.Linq;

namespace LINQExample
{
    class Program
    {
        static void Main(string[] args)
        {
            string xmlData = @"
                <Books>
                    <Book>
                        <Title>LINQ in Action</Title>
                        <Author>Fabrice Marguerie</Author>
                    </Book>
                    <Book>
                        <Title>Pro LINQ</Title>
                        <Author>Joe Rattz</Author>
                    </Book>
                </Books>";

            XDocument xdoc = XDocument.Parse(xmlData);

            // XML 데이터에서 제목 검색 (Querying Titles from XML)
            var titles = from book in xdoc.Descendants("Book")
                         select book.Element("Title").Value;

            Console.WriteLine("Book Titles:");
            foreach (var title in titles)
            {
                Console.WriteLine(title);
            }
        }
    }
}

LINQ 메서드 구문과 쿼리 구문 비교 (Method Syntax vs Query Syntax)

LINQ에는 메서드 구문과 쿼리 구문 두 가지 스타일이 있습니다. 두 구문은 동일한 작업을 수행하지만, 작성 방식이 다릅니다.

예제: 메서드 구문과 쿼리 구문 비교 (Comparison of Method Syntax and Query Syntax)

using System;
using System.Linq;

namespace LINQExample
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

            // 쿼리 구문 (Query Syntax)
            var querySyntax = from number in numbers
                              where number % 2 == 0
                              orderby number descending
                              select number;

            // 메서드 구문 (Method Syntax)
            var methodSyntax = numbers.Where(n => n % 2 == 0)
                                      .OrderByDescending(n => n);

            Console.WriteLine("Query Syntax:");
            foreach (var num in querySyntax)
            {
                Console.WriteLine(num);
            }

            Console.WriteLine("Method Syntax:");
            foreach (var num in methodSyntax)
            {
                Console.WriteLine(num);
            }
        }
    }
}

결론 (Conclusion)

LINQ는 다양한 데이터 소스를 일관된 방식으로 쿼리하고 조작할 수 있는 강력한 도구입니다. LINQ의 쿼리 구문과 메서드 구문을 이해하고, 다양한 연산자와 데이터 소스에서의 사용법을 익히는 것이 중요합니다. LINQ를 통해 C#에서 데이터 처리를 효율적이고 간결하게 구현할 수 있습니다.


Posted in C#

Leave a Reply

Your email address will not be published. Required fields are marked *