LINQ to Entities는 개발자가 Visual Basic 또는 Visual C#을 사용하여 Entity Framework 개념적 모델에 대해 쿼리를 작성할 수 있도록 하는 LINQ(Language-Integrated Query) 지원을 제공합니다. Entity Framework에 대한 쿼리는 개체 컨텍스트에 대해 실행되는 명령 트리 쿼리로 표시됩니다. LINQ to Entities는 LINQ(Language-Integrated 쿼리) 쿼리를 명령 트리 쿼리로 변환하고, Entity Framework에 대해 쿼리를 실행하고, Entity Framework와 LINQ 모두에서 사용할 수 있는 개체를 반환합니다. 다음은 LINQ to Entities 쿼리를 만들고 실행하는 프로세스입니다.
에서 ObjectQuery<T>인스턴스를 ObjectContext 생성합니다.
인스턴스를 사용하여 C# 또는 Visual Basic에서 LINQ to Entities 쿼리를 작성합니다 ObjectQuery<T> .
LINQ 표준 쿼리 연산자 및 식을 명령 트리로 변환합니다.
명령 트리 표현에서 데이터 원본에 대해 쿼리를 실행합니다. 실행 중에 데이터 원본에 throw된 모든 예외는 클라이언트에 직접 전달됩니다.
쿼리 결과를 클라이언트로 다시 반환합니다.
ObjectQuery 인스턴스 생성
제네릭 클래스는 ObjectQuery<T> 형식화된 엔터티가 0개 이상인 컬렉션을 반환하는 쿼리를 나타냅니다. 개체 쿼리는 일반적으로 수동으로 생성되는 대신 기존 개체 컨텍스트에서 생성되며 항상 해당 개체 컨텍스트에 속합니다. 이 컨텍스트는 쿼리를 작성하고 실행하는 데 필요한 연결 및 메타데이터 정보를 제공합니다. 제네릭 클래스는 ObjectQuery<T> 작성기 메서드를 사용하여 LINQ 쿼리를 증분 방식으로 빌드할 수 있는 제네릭 인터페이스를 구현 IQueryable<T> 합니다. 또한 C# var
키워드를 사용하여 컴파일러가 엔터티의 형식을 유추하도록 할 수도 있습니다(Dim
Visual Basic에서는 로컬 형식 유추를 사용하도록 설정).
쿼리 작성
제네릭 인터페이스를 ObjectQuery<T> 구현하는 제네릭 IQueryable<T> 클래스의 인스턴스는 LINQ to Entities 쿼리의 데이터 원본 역할을 합니다. 쿼리에서 데이터 원본에서 검색하려는 정보를 정확히 지정합니다. 쿼리는 정보를 반환하기 전에 정렬, 그룹화 및 셰이닝하는 방법을 지정할 수도 있습니다. LINQ에서 쿼리는 변수에 저장됩니다. 이 쿼리 변수는 아무 작업도 수행하지 않고 데이터를 반환하지 않습니다. 쿼리 정보만 저장합니다. 쿼리를 만든 후에는 해당 쿼리를 실행하여 데이터를 검색해야 합니다.
LINQ to Entities 쿼리는 쿼리 식 구문과 메서드 기반 쿼리 구문의 두 가지 구문으로 작성할 수 있습니다. 쿼리 식 구문 및 메서드 기반 쿼리 구문은 C# 3.0 및 Visual Basic 9.0에서 새로 추가되었습니다.
자세한 내용은 LINQ to Entities의 쿼리를 참조하세요.
쿼리 변환
Entity Framework에 대해 LINQ to Entities 쿼리를 실행하려면 LINQ 쿼리를 Entity Framework에 대해 실행할 수 있는 명령 트리 표현으로 변환해야 합니다.
LINQ to Entities 쿼리는 LINQ 표준 쿼리 연산자(예: Select, Where및) 및 GroupBy식(x > 10, Contact.LastName 등)으로 구성됩니다. LINQ 연산자는 클래스에 의해 정의되지 않고 클래스의 메서드입니다. LINQ에서 식은 네임스페이스 내 System.Linq.Expressions 의 형식 및 확장에 의해 람다 함수에 나타낼 수 있는 모든 항목을 포함할 수 있습니다. 이는 엔터티 프레임워크에서 허용하는 식의 상위 집합으로, 정의에 따라 데이터베이스에서 허용되고 지원되는 ObjectQuery<T>작업으로 제한됩니다.
Entity Framework에서 연산자와 식은 모두 단일 형식 계층으로 표현된 다음 명령 트리에 배치됩니다. 명령 트리는 Entity Framework에서 쿼리를 실행하는 데 사용됩니다. LINQ 쿼리를 명령 트리로 표현할 수 없는 경우 쿼리가 변환될 때 예외가 throw됩니다. LINQ에서 엔터티로의 변환에는 표준 쿼리 연산자의 변환과 식 변환이라는 두 개의 하위 변환이 포함됩니다.
LINQ to Entities에 유효한 변환이 없는 여러 LINQ 표준 쿼리 연산자가 있습니다. 이러한 연산자를 사용하려고 하면 쿼리 변환 시 예외가 발생합니다. 지원되는 LINQ to Entities 연산자 목록은 지원되는 LINQ 메서드 및 지원되지 않는 LINQ 메서드(LINQ to Entities)를 참조하세요.
LINQ to Entities에서 표준 쿼리 연산자를 사용하는 방법에 대한 자세한 내용은 LINQ to Entities 쿼리의 표준 쿼리 연산자를 참조하세요.
일반적으로 LINQ to Entities의 식은 서버에서 평가되므로 식의 동작이 CLR 의미 체계를 따르지 않아야 합니다. 자세한 내용은 LINQ to Entities 쿼리의 식을 참조하세요.
CLR 메서드 호출이 데이터 원본의 정식 함수에 매핑되는 방법에 대한 자세한 내용은 CLR 메서드와 정식 함수 매핑을 참조하세요.
LINQ to Entities 쿼리 내에서 정식, 데이터베이스 및 사용자 지정 함수를 호출하는 방법에 대한 자세한 내용은 LINQ to Entities 쿼리에서 함수 호출을 참조하세요.
쿼리 실행
사용자가 LINQ 쿼리를 만든 후에는 Entity Framework(명령 트리 형식)와 호환되는 표현으로 변환된 다음, 데이터 원본에 대해 실행됩니다. 쿼리 실행 시 모든 쿼리 식(또는 쿼리 구성 요소)은 클라이언트 또는 서버에서 평가됩니다. 여기에는 결과 구체화 또는 엔터티 프로젝션에 사용되는 식이 포함됩니다. 자세한 내용은 쿼리 실행을 참조하세요. 쿼리를 한 번 컴파일한 다음 다른 매개 변수로 여러 번 실행하여 성능을 향상시키는 방법에 대한 자세한 내용은 컴파일된 쿼리(LINQ to Entities)를 참조하세요.
구체화
구체화는 쿼리 결과를 CLR 형식으로 클라이언트에 다시 반환하는 프로세스입니다. LINQ to Entities에서 쿼리 결과 데이터 레코드는 반환되지 않습니다. 항상 사용자가 정의하거나 Entity Framework에서 정의하거나 컴파일러(익명 형식)에 의해 생성된 지원 CLR 형식이 있습니다. 모든 개체 구체화는 Entity Framework에서 수행됩니다. Entity Framework와 CLR 간에 매핑할 수 없기 때문에 발생하는 오류로 인해 객체 구체화 중에 예외가 발생합니다.
쿼리 결과는 일반적으로 다음 중 하나로 반환됩니다.
0개 이상의 형식화된 엔터티 개체 컬렉션 또는 개념적 모델에 정의된 복합 형식의 프로젝션입니다.
Entity Framework에서 지원하는 CLR 형식입니다.
인라인 컬렉션입니다.
무명 형식
자세한 내용은 쿼리 결과를 참조하세요.
이 섹션 안에
LINQ to Entities 쿼리의 표준 쿼리 연산자
지원되는 LINQ 메서드 및 지원되지 않는 LINQ 메서드(LINQ to Entities)
LINQ to Entities의 알려진 문제 및 고려 사항