2010-06-18 4 views

답변

0

컴파일러는 평가하고 더 코드를 컴파일하기 전에 해당하는 람다 구문으로 쿼리 식을 변환됩니다 식입니다.

var query = from foo in foos 
      where foo.Bar == someString 
      select new 
      { 
       Baz = foo.Baz, 
       Id = foo.Id 
      }; 

+0

하지만 그것은 그 이야기의 절반에 불과합니다. 그렇지 않습니까? 나머지 절반 (적어도 L2S의 경우)은 lamba 표현 구문에서 표현 트리로 변환됩니다. – Niki

+0

그러면 나머지 절반은 "C# 컴파일러가 람다 식을 처리하는 방법"이 될 것입니다. L2Objs 관점에서 실제로 이것에 대해서만 생각할 것입니다. –

0

대답은 기본 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 문으로 변환됩니다.

관련 문제