LINQ 패턴에서 모든 데이터 원본을 쿼리할 수 있도록 LINQ를 확장하는 다양한 방법이 있습니다. 데이터 원본은 데이터 구조, 웹 서비스, 파일 시스템 또는 데이터베이스일 수 있습니다. LINQ 패턴을 사용하면 쿼리의 구문과 패턴이 변경되지 않으므로 클라이언트가 LINQ 쿼리를 사용하도록 설정된 데이터 원본을 쉽게 쿼리할 수 있습니다. LINQ를 이러한 데이터 원본으로 확장할 수 있는 방법은 다음과 같습니다.
형식에서 IEnumerable<T> 인터페이스를 구현하여 해당 형식의 LINQ to Objects 쿼리를 사용하도록 설정합니다.
Where, Select와 같은 형태를 확장하는 표준 쿼리 연산자 메서드를 만들어 해당 형식에 대해 사용자 지정 LINQ 쿼리를 사용할 수 있도록 합니다.
당신의 데이터 소스에 대한 인터페이스를 구현하는 공급자 만들기 IQueryable<T> 이 인터페이스를 구현하는 공급자는 식 트리 형식으로 LINQ 쿼리를 수신하며, 이러한 쿼리는 사용자 지정 방식으로(예: 원격으로) 실행할 수 있습니다.
기존 LINQ 기술을 활용하는 데이터 원본에 대한 공급자를 만듭니다. 이러한 공급자는 쿼리뿐만 아니라 사용자 정의 형식에 대한 삽입, 업데이트 및 삭제 작업 및 매핑도 사용할 수 있습니다.
이 항목에서는 이러한 옵션에 대해 설명합니다.
데이터 원본의 LINQ 쿼리를 사용하도록 설정하는 방법
In-Memory 데이터
두 가지 방법으로 메모리 내 데이터의 LINQ 쿼리를 사용하도록 설정할 수 있습니다. 데이터가 구현 IEnumerable<T>되는 형식인 경우 LINQ to Objects를 사용하여 데이터를 쿼리할 수 있습니다. 형식의 열거를 인터페이스 IEnumerable<T>를 구현하여 활성화하는 것이 합리적이지 않은 경우, 해당 형식 내에서 LINQ 표준 쿼리 연산자 메서드를 정의하거나, 형식을 확장하는 LINQ 표준 쿼리 연산자 메서드를 생성할 수 있습니다. 표준 쿼리 연산자의 사용자 지정 구현에서는 지연된 실행을 사용하여 결과를 반환해야 합니다.
원격 데이터
원격 데이터 원본의 LINQ 쿼리를 사용하도록 설정하는 가장 좋은 옵션은 인터페이스를 구현하는 IQueryable<T> 것입니다. 그러나 이는 LINQ와 같은 공급자를 데이터 원본에 대한 SQL로 확장하는 것과 다릅니다. LinQ to SQL과 같은 기존 LINQ 기술을 다른 유형의 데이터 원본으로 확장하기 위한 공급자 모델은 Visual Studio 2008에서 사용할 수 없습니다.
IQueryable LINQ 공급자
구현 IQueryable<T> 하는 LINQ 공급자는 복잡성에 따라 크게 달라질 수 있습니다. 이 섹션에서는 다양한 복잡성 수준에 대해 설명합니다.
덜 복잡한 IQueryable
공급자는 웹 서비스의 단일 메서드와 인터페이스할 수 있습니다. 이 유형의 공급자는 처리하는 쿼리에서 특정 정보를 예상하기 때문에 매우 구체적입니다. 단일 결과 형식을 노출하는 닫힌 형식 시스템이 있습니다. 쿼리 실행의 대부분은 예를 들어 표준 쿼리 연산자의 구현을 Enumerable 사용하여 로컬에서 발생합니다. 덜 복잡한 공급자는 쿼리를 나타내는 식 트리에서 하나의 메서드 호출 식만 검사하고 나머지 쿼리 논리를 다른 곳에서 처리하도록 할 수 있습니다.
중간 복잡성 공급자는 IQueryable
부분적으로 표현되는 쿼리 언어가 있는 데이터 원본을 대상으로 할 수 있습니다. 웹 서비스를 대상으로 하는 경우 둘 이상의 웹 서비스 메서드와 인터페이스하고 쿼리가 제기하는 질문에 따라 호출할 메서드를 선택할 수 있습니다. 중간 복잡성 공급자는 단순 공급자보다 더 풍부한 형식 시스템을 가지지만 여전히 고정 형식 시스템입니다. 예를 들어 공급자는 트래버스할 수 있는 일대다 관계가 있는 형식을 노출할 수 있지만 사용자 정의 형식에 대한 매핑 기술을 제공하지는 않습니다.
LINQ to SQL 공급자와 같은 복잡한 IQueryable
공급자는 전체 LINQ 쿼리를 SQL과 같은 표현 쿼리 언어로 변환할 수 있습니다. 복잡한 공급자는 쿼리에서 다양한 질문을 처리할 수 있으므로 덜 복잡한 공급자보다 더 일반적입니다. 또한 개방형 형식 시스템이 있으므로 사용자 정의 형식을 매핑하기 위한 광범위한 인프라를 포함해야 합니다. 복잡한 공급자를 개발하려면 상당한 노력이 필요합니다.
참고하십시오
.NET