C#/LINQ

C# LINQ 쿼리를 작성하여 데이터 쿼리

소나무꼴 2024. 1. 1. 17:27

URL

 

C#을 사용하여 LINQ 쿼리 작성 - C#

C#에서 LINQ 쿼리를 작성하는 방법을 알아봅니다.

learn.microsoft.com

 

 

 

 

목차

     

     

     

     

     

    C# LINQ 쿼리를 작성하여 데이터 쿼리

    표준 쿼리 연산자 확장 메서드

     

    쿼리 구문과 메서드 구문.  의미상 동등한 쿼리

    int[] numbers = [ 5, 10, 8, 3, 6, 12 ];
    
    //Query syntax:
    IEnumerable<int> numQuery1 =
        from num in numbers
        where num % 2 == 0
        orderby num
        select num;
    
    //Method syntax:
    IEnumerable<int> numQuery2 = numbers.Where(num => num % 2 == 0).OrderBy(n => n);
    
    foreach (int i in numQuery1)
    {
        Console.Write(i + " ");
    }
    Console.WriteLine(System.Environment.NewLine);
    foreach (int i in numQuery2)
    {
        Console.Write(i + " ");
    }

    람다 식

    이전 예제 조건식(num % 2 == 0)이 메서드 Where(num => num % 2 == 0). 에 인라인 인수 Enumerable.Where 로 전달되는 식이 람다식.

     

    쿼리 작성 가능성

     

    예제 - 쿼리 구문

    1. 첫 번째 쿼리 식은 where 절과 함께 조건을 적용하여 결과를 필터링 또는 제한하는 방법을 보여 줍니다. 이 식은 값이 7보다 크거나 3보다 작은 소스 시퀀스의 모든 요소를 반환합니다.
    2. 두 번째 식은 반환된 결과를 정렬하는 방법을 보여 줍니다.
    3. 세 번째 식은 키에 따라 결과를 그룹화하는 방법을 보여 줍니다. 이 쿼리는 단어의 첫 글자를 기반으로 두 그룹을 반환합니다.
    List<int> numbers = [5, 4, 1, 3, 9, 8, 6, 7, 2, 0];
    
    // The query variables can also be implicitly typed by using var
    
    // Query #1.
    IEnumerable<int> filteringQuery =
        from num in numbers
        where num is < 3 or > 7
        select num;
    
    // Query #2.
    IEnumerable<int> orderingQuery =
        from num in numbers
        where num is < 3 or > 7
        orderby num ascending
        select num;
    
    // Query #3.
    string[] groupingQuery = ["carrots", "cabbage", "broccoli", "beans", "barley"];
    IEnumerable<IGrouping<char, string>> queryFoodGroups =
        from item in groupingQuery
        group item by item[0];


    예제 - 메서드 구문

     

    List<int> numbers1 = [5, 4, 1, 3, 9, 8, 6, 7, 2, 0];
    List<int> numbers2 = [15, 14, 11, 13, 19, 18, 16, 17, 12, 10];
    
    // Query #4.
    double average = numbers1.Average();
    
    // Query #5.
    IEnumerable<int> concatenationQuery = numbers1.Concat(numbers2);
    
    // Query #6.
    IEnumerable<int> largeNumbersQuery = numbers2.Where(c => c > 15);
    
    // var is used for convenience in these queries
    double average = numbers1.Average();
    var concatenationQuery = numbers1.Concat(numbers2);
    var largeNumbersQuery = numbers2.Where(c => c > 15);
    // var is used for convenience in these queries
    double average = numbers1.Average();
    var concatenationQuery = numbers1.Concat(numbers2);
    var largeNumbersQuery = numbers2.Where(c => c > 15);

     

    예제 - 혼합된 쿼리 및 메서드 구문

    쿼리 #7은 컬렉션이 아닌 단일 값을 반환하므로 쿼리가 즉시 실행

    // Query #7.
    
    // Using a query expression with method syntax
    var numCount1 = (
        from num in numbers1
        where num is > 3 and < 7
        select num
    ).Count();
    
    // Better: Create a new variable to store
    // the method call result
    IEnumerable<int> numbersQuery =
        from num in numbers1
        where num is > 3 and < 7
        select num;
    
    var numCount2 = numbersQuery.Count();

     

     

    'C# > LINQ' 카테고리의 다른 글

    표준 쿼리 연산자 : LINQ를 통한 데이터 변환(C#)  (1) 2024.01.04
    확장명 메서드  (0) 2024.01.03
    쿼리 식 기본 사항  (0) 2023.12.30
    LINQ 쿼리 소개(C#)  (0) 2023.12.30