English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

LINQ 메서드 문법

이전 장에서 LINQ 쿼리 문법을 배웠습니다. 여기서는 메서드 문법을 배웁니다.

메서드 문법(연속 문법으로도 알려짐)은 Enumerable나 Queryable 스태틱 클래스에 포함된 확장 메서드를 사용하여, 어떤 클래스의 확장 메서드를 호출하는 것과 같은 방식으로 사용됩니다.  

컴파일러는 컴파일 시 쿼리 문법을 메서드 문법으로 변환합니다.

아래는 LINQ 메서드 문법 쿼리 예제로,

// 문자 집합
IList<string> stringList = new List<string>() { 
    "C# Tutorials",
    "VB.NET Tutorials",
    "Learn C++",
    "MVC Tutorials" ,
    "Java" 
};
// LINQ 쿼리 문법
var result = stringList.Where(s => s.Contains("Tutorials"));

아래 그림은 LINQ 메서드 문법의 구조를 설명합니다.

LINQ 메서드 문법 구조

위 그림과 같이 메서드 문법은 확장 메서드와 Lambda 표현식을 포함합니다. Enumerable 클래스에서 정의된 확장 메서드 Where().

Where 확장 메서드의 서명을 확인하면, Where 메서드가 predicate 위임 Func<Student,bool>。이는 Student 객체를 입력 매개변수로 받아서 부울 값을 반환하는 위임 함수를 전달할 수 있다는 의미입니다. 아래 그림처럼 lambda 표현식은 Where 절에 전달되는 위임으로 사용됩니다. 다음 장에서 Lambda 표현식을 배웁니다.

Where에서 Func 위임

아래 예제는 LINQ 메서드 문법 쿼리를 IEnumerable <T> 집합과 함께 사용하는 방법을 보여줍니다。

// 학생 집합
IList<Student> studentList = new List<Student>() { 
        new Student() { .StudentID = 1, StudentName = "John", Age = 13}
        new Student() { .StudentID = 2, StudentName = "Moin",  Age = 21 }
        new Student() { .StudentID = 3, .StudentName = "Bill", .Age = 18 }
        new Student() { .StudentID = 4, .StudentName = "Ram", .Age = 20},
        new Student() { .StudentID = 5, .StudentName = "Ron", .Age = 15 } 
    };
// LINQ 메서드 문법으로 청소년 학생 찾기
var teenAgerStudents = studentList.Where(s => s.Age > 12 && s.Age < 20)
                                  .ToList<Student>();
// 학생 집합
Dim studentList = New List(Of Student) From {
        New Student() With {.StudentID = 1, .StudentName = "John", .Age = 13}
        New Student() With {.StudentID = 2, .StudentName = "Moin", .Age = 21}
        New Student() With {.StudentID = 3, .StudentName = "Bill", .Age = 18}
        New Student() With {.StudentID = 4, .StudentName = "Ram", .Age = 20},
        New Student() With {.StudentID = 5, .StudentName = "Ron", .Age = 15}
    }
// LINQ 메서드 문법으로 청소년 학생 찾기
Dim teenAgerStudents As IList(Of Student) = studentList.Where(Function(s) s.Age > 12 And s.Age < 20)
                                                       .ToList()

 기억해야 할 주요 사항

  1. 그 이름에서 알 수 있듯이메서드 문법확장 메서드 호출처럼 사용됩니다.

  2. LINQ메서드 문법Fluent 문법(연속 문법)라고도 합니다. 그 이유는 일련의 확장 메서드 호출을 허용하기 때문입니다.

  3. 암시적 타입 변수-var는 LINQ 쿼리 결과를 저장할 수 있습니다.