표준 쿼리 연산자 개요(C#)

표준 쿼리 연산자 는 LINQ 패턴을 형성하는 메서드입니다. 이 메서드 중 대부분은 시퀀스에서 작동합니다. 여기서 시퀀스란 IEnumerable<T> 인터페이스 또는 IQueryable<T> 인터페이스를 구현하는 형식의 개체를 의미합니다. 표준 쿼리 연산자는 필터링, 프로젝션, 집계, 정렬 등을 포함하여 다양한 쿼리 기능을 제공합니다.

IEnumerable<T> 형식의 개체와 작동하는 연산자와 IQueryable<T> 형식의 개체와 작동하는 연산자로 두 가지 LINQ 표준 쿼리 연산자 집합이 있습니다. 각 집합을 구성하는 메서드는 각각 EnumerableQueryable 클래스의 정적 멤버입니다. 작동하는 형식의 확장 메서드 로 정의됩니다. 확장 메서드는 정적 메서드 구문 또는 인스턴스 메서드 구문을 사용하여 호출할 수 있습니다.

또한 여러 표준 쿼리 연산자 메서드는 IEnumerable<T> 또는 IQueryable<T>을 기반으로 하는 형식이 아닌 다른 형식에서 작동합니다. Enumerable 형식은 IEnumerable 형식의 개체에서 작동하는 이러한 두 메서드를 정의합니다. 두 메서드 Cast<TResult>(IEnumerable)OfType<TResult>(IEnumerable)을 사용하면 LINQ 패턴에서 매개 변수가 없는 컬렉션이나 제네릭이 아닌 컬렉션을 쿼리할 수 있습니다. 이 작업을 위해 강력한 형식의 개체 컬렉션을 만듭니다. Queryable 클래스는 IQueryable 형식의 개체에서 작동하는 두 개의 유사한 메서드 Cast<TResult>(IQueryable)OfType<TResult>(IQueryable)을 정의합니다.

표준 쿼리 연산자는 단일 값을 반환하는지 또는 시퀀스를 반환하는지에 따라 실행되는 타이밍이 다릅니다. singleton 값(예: AverageSum)을 반환하는 이러한 메서드는 즉시 실행됩니다. 시퀀스를 반환하는 메서드는 쿼리 실행을 지연하고 열거 가능한 개체를 반환합니다.

메모리 내 컬렉션에 대해 작동하는 메서드, 즉 IEnumerable<T>을 확장하는 메서드의 경우 반환된 열거 가능한 개체는 메서드에 전달된 인수를 캡처합니다. 해당 개체를 열거하는 경우 쿼리 연산자의 논리가 사용되며 쿼리 결과가 반환됩니다.

반면 IQueryable<T>을 확장하는 메서드는 쿼리 동작을 구현하지 않고, 수행할 쿼리를 나타내는 식 트리를 빌드합니다. 쿼리 처리는 소스 IQueryable<T> 개체에 의해 처리됩니다.

쿼리 메서드 호출을 연결하여 임의로 복잡해질 수 있는 한 쿼리로 연결될 수 있습니다.

다음 코드 예제에서는 표준 쿼리 연산자를 사용하여 시퀀스에 대한 정보를 가져올 수 있는 방법을 보여 줍니다.

string sentence = "the quick brown fox jumps over the lazy dog";  
// Split the string into individual words to create a collection.  
string[] words = sentence.Split(' ');  
  
// Using query expression syntax.  
var query = from word in words  
            group word.ToUpper() by word.Length into gr  
            orderby gr.Key  
            select new { Length = gr.Key, Words = gr };  
  
// Using method-based query syntax.  
var query2 = words.  
    GroupBy(w => w.Length, w => w.ToUpper()).  
    Select(g => new { Length = g.Key, Words = g }).  
    OrderBy(o => o.Length);  
  
foreach (var obj in query)  
{  
    Console.WriteLine("Words of length {0}:", obj.Length);  
    foreach (string word in obj.Words)  
        Console.WriteLine(word);  
}  
  
// This code example produces the following output:  
//  
// Words of length 3:  
// THE  
// FOX  
// THE  
// DOG  
// Words of length 4:  
// OVER  
// LAZY  
// Words of length 5:  
// QUICK  
// BROWN  
// JUMPS

쿼리 식 구문

자주 사용되는 표준 쿼리 연산자 중 일부에는 ‘쿼리 식’의 일부로 호출할 수 있는 전용 C# 및 Visual Basic 언어 키워드 구문이 있습니다. 전용 키워드와 해당 구문이 있는 표준 쿼리 연산자에 대한 자세한 내용은 표준 쿼리 연산자에 대한 쿼리 식 구문(C#)을 참조하세요.

표준 쿼리 연산자 확장

대상 도메인 또는 기술에 적합한 도메인 특정 메서드를 만들어 표준 쿼리 연산자 집합을 강화할 수 있습니다. 또한 원격 평가, 쿼리 변환, 최적화 등의 추가 서비스를 제공하는 고유한 구현으로 표준 쿼리 연산자를 바꿀 수도 있습니다. 예제는 AsEnumerable을 참조하세요.

다음 링크를 누르면 기능에 따라 다양한 표준 쿼리 연산자에 대한 추가 정보를 제공하는 문서로 이동합니다.

데이터 정렬(C#)

집합 작업(C#)

데이터 필터링(C#)

수량자 작업(C#)

프로젝션 작업(C#)

데이터 분할(C#)

조인 작업(C#)

데이터 그룹화(C#)

생성 작업(C#)

같음 연산(C#)

요소 작업(C#)

데이터 형식 변환(C#)

연결 작업(C#)

집계 작업(C#)

참조