LINQ의 아래 두 샘플을 보면 LINQ 데이터 소스가 어느 시점에 결정됩니까?어떤 시점에서 LINQ 데이터 소스가 결정됩니까?
int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };
IEnumerable<int> linqToOjects = numbers.Where(x => true);
XElement root = XElement.Load("PurchaseOrder.xml");
IEnumerable<XElement> linqToXML = root.Elements("Address").Where(x => true);
나의 이해는이 두 개의 서로 다른 데이터 소스를 조회하는 데 사용되는 기본 코드는 LINQ 방법에 의해 생성 된 IEnumerable을 객체 내에 살고 있다는 것입니다.
제 질문은 어떤 시점에서 정확히 Linq 개체 라이브러리 또는 Linq To XML 라이브러리를 사용하도록 코드를 생성할지 여부를 결정합니다.
이러한 데이터 원본을 쿼리하는 데 사용되는 기본 코드 (실제로 데이터를 쿼리하는 코드)는 자체 라이브러리 내에 존재하며 데이터 원본에 의존하여 호출되는 것으로 가정합니다. https://referencesource.microsoft.com/에서 Where 절/확장 메서드의 코드를보고 원하는 공급자에 대한 호출이있을 수 있다고 생각했지만 일반적인 것 같습니다.
IEnumerable에 들어가는 마법은 어떻게 결정됩니까?
'IEnumerable'은'.ToList()'또는'.ToArray()'를 호출 할 때와 같이 "결정된"타입으로 변경 될 때까지 결정되지 않습니다. 그러나 IEnumerable 자체는 절대로 결정되지 않습니다. – Franck
감사합니다 - IEnumerable 인스턴스로 지정해야합니다. – Brummy
IQueryable로 작업하는 경우에만이 문제가 중요합니다. 그렇지 않으면 개체에 거의 모든 linq되지 않습니다. (그러나 실제로 사용 된 임 플리 멘 테이션은 어떤 클래스를 입력으로 제공하고 어떤 확장 메소드가 해결되는지에 따라 컴파일 타임에 선택됩니다.) –