2016-08-09 2 views
0

Linq-to-Object에서는 C# 언어로 처리되는 LINQ 쿼리를 실행하기 위해 메모리 내 데이터를 처리합니다.LINQ-to-Object는 LINQ 공급자입니까?

우리가 왜 공급자 (LINQ-to-Object)를 사용하는 메모리 내 데이터를 기반으로 실행되는 Linq 쿼리를 작성합니까?

답변

2

아니요, Linq to Object은 제공자가 아니며 쿼리를 실행하기 위해 다른 중간 제공자 (객체에 대한 linq)를 중계 할 필요가 없습니다.

더 명확하게 이해하려면 실제로 공급자가 무엇인지 이해해야합니다. 공급자는 기본적으로 IQueryProvider된 IQueryable 인터페이스를 구현하는 구현이 주로 공급자가 이해 뭔가에 LINQ 쿼리를 변환합니다. 예를 들어, LINQ to SQL으로 쿼리를 쿼리하여 SQL로 변환/쿼리하면 해당 공급자 (이 경우) 만 SQL을 인식하기 때문에 해당 쿼리가 SQL로 변환됩니다.

데이터의 메모리 수집에 대해 쿼리를 실행하면 C#에서는 linq 쿼리를 다른 쿼리로 변환하지 않아도됩니다.

마찬가지로 @Stilgar는 "소스가 IQueryable 인 경우 제공자가 사용됩니다 ("). In-Memory 데이터에 대해 작업 할 때는 소스가 기본적으로 IEnumerable입니다.

2

LINQ to Objects는 LINQ 공급자가 아닙니다. IEnumerable에서 LINQ API를 구현 한 것입니다. LINQ API는 메서드 이름을 올바르게 지정하고 적절한 인수를 수락하는 한 거의 모든 유형에서 구현할 수 있습니다. LINQ와 관련된 LINQ 공급자와 매우 가까운 뭔가가 있다고합니다. 제공자는 소스가 IQueryable이고 컴파일러가 표현식 트리를 생성 할 때 사용됩니다. 표현식 트리는 델리게이트로 컴파일 될 수 있으므로 Compile 메서드는 LINQ 공급자와 매우 유사한 역할을합니다.

사실 "LINQ Provider"는 LINQ API의 구현을 나타내는 데 자주 사용됩니다. 작은 차이에도 불구하고 "인수"와 "매개 변수"가 같은 의미로 사용되는 것과 비슷합니다.