이 What’s the hardest or most misunderstood aspect of LINQ? 질문은 C# 컴파일러 취급 쿼리 식 (C# 3.0 DOTNET 3.5) 나는 기본적으로 질문의 답을 찾고 어떻게?내가 가장 좋아하는 작가 중 하나를 통해가는
어떻게 C# 컴파일러 취급 쿼리는
감사
이 What’s the hardest or most misunderstood aspect of LINQ? 질문은 C# 컴파일러 취급 쿼리 식 (C# 3.0 DOTNET 3.5) 나는 기본적으로 질문의 답을 찾고 어떻게?내가 가장 좋아하는 작가 중 하나를 통해가는
어떻게 C# 컴파일러 취급 쿼리는
감사
컴파일러는 평가하고 더 코드를 컴파일하기 전에 해당하는 람다 구문으로 쿼리 식을 변환됩니다 식입니다.
var query = from foo in foos
where foo.Bar == someString
select new
{
Baz = foo.Baz,
Id = foo.Id
};
등
하지만 그것은 그 이야기의 절반에 불과합니다. 그렇지 않습니까? 나머지 절반 (적어도 L2S의 경우)은 lamba 표현 구문에서 표현 트리로 변환됩니다. – Niki
그러면 나머지 절반은 "C# 컴파일러가 람다 식을 처리하는 방법"이 될 것입니다. L2Objs 관점에서 실제로 이것에 대해서만 생각할 것입니다. –
대답은 기본 LINQ 사이에 다를 수 있습니다
이var query = foos.Where(f => f.Bar == someString).Select(f => new { Baz = f.Baz, Id = f.Id });
당신의 복잡한 일어날 것 같은 조인 람다 버전, 그룹,로 변환 될 것입니다 그래서 코드는 시작하는 공급자.
일반적으로 LINQ 쿼리 식 또는 메서드 체인은 공급자 별 구현으로 이동하기 전에 식 트리로 변환됩니다.
LINQ to Objects (IEnumerable)의 경우 식 트리가 System.Func 또는 System.Action 대리자 집합과 호환됩니다.
LINQ to SQL (IQueryable)의 경우 식 트리가 T-SQL 문으로 변환됩니다.
이것은 약간의 질문입니다. 정확히 무엇의 관점에서? 아니면 당신은 그들이 결국 컴파일로 끝나는 것을 의미합니까? –