2009-11-30 3 views
2

LINQ referes의 문맥에서 "지연 쿼리 평가"란 용어는 무엇입니까? (예를 들어주십시오).LINQ referes의 컨텍스트에서 "지연 쿼리 평가"란 용어는 무엇입니까?

+0

이 기사를 검색하고 읽으셨습니까? –

+1

중복 된 http://stackoverflow.com/questions/456691/how-does-linq-defer-execution-when-in-a-using-statement –

+1

이 질문은 중복되지 않습니다. 456691. 456691이 왜 using 문은 원인을 평가합니다. 이것은보다 일반적인 질문이지만 456691은 매우 구체적입니다. –

답변

4

W LINQ와 관련하여 빌드 한 쿼리는 결과가 실제로 열거 될 때까지 평가되지 않습니다. 쿼리를 생성 할 때 표현 트리, 대리자 시퀀스 또는 yield 문과 같은 다른 언어 구문을 사용하여 나중에 실행을 연기 할 수 있습니다. 식 트리 (대리자/수익률)는 쿼리 결과가 필요할 때까지 실제 쿼리를 생성하지 않습니다. 이렇게하면 결과를 가능한 한 작게 유지하면서 마지막 순간까지 쿼리를 작성하지 않고 쿼리를 작성할 수 있습니다. 예를 들어, LINQ에 우리가 SQL합니다 :

// no query is executed by this statement 
var query = from product in db.Products 
      select product; 


// a select count(*) from Products is executed by this statement 
var productCount = query.Count(); 

// a select ... from Products where ID == 3 is executed by this statement 
var products = query.First(p => p.ID == 3); 


// a select .. from Products is executed by this statement 
foreach (var product in query) 
{ 
    ... 
} 

이의 좋은 한 discusion는 http://language-integrated-query.com/Linq_Deffered_Query.aspxhttp://msdn.microsoft.com/en-us/library/bb308959.aspx에서 찾을 수 있습니다.

+0

David Basarab과 동일합니다. 왜 연기 된 실행이 SQL과 전혀 관련이 없는지 구체적으로 SQL에 집중하고 있습니까? – Joren

+1

나는 거의 항상 SQL 문맥에서 LINQ를 사용하기 때문에. 좀 더 일반적인 것으로 업데이트했습니다. – tvanfosson

3

평가가 잘못되었다는 것은 해당 항목을 사용할 때까지 Linq에서 SQL로 SQL Server 데이터베이스로 이동하지 않는다는 것을 의미합니다.

데이터베이스 테이블이 있습니다. 사용자라고 부르십시오.

이렇게하면

var userList = myDataContext.User; 

데이터베이스를 아직 공격하지 않았습니다.

같은 것을 할 때.

foreach(var item in userList) 
{ 
    // do something with item 
} 

foreach가 실행을 위해 데이터베이스로 이동할 때 userList의 열거자를 가져올 때.

따라서 클라이언트 코드에서 사용될 때까지 평가가 연기됩니다.

+0

지연된 평가는 SQL과 관련해서는 아무런 관련이 없습니다. LINQ의 다른 맛 또한 그것을 사용합니다. 질문은 SQL을 지정하지 않으므로보다 일반적인 설명을 제공해야합니다. – Joren