2009-07-17 5 views

답변

5

처럼, 체인 쿼리를 데이지 수 있다는 것을 의미합니다 생각합니다. 매우 효율적으로 할 수 있기 때문에 중요합니다.

var employees = GetEmployees(); 

하나는 모든 관리자를 반환하는 것을 사용하는 다른 방법 : 예를 들어

,의 당신이 직원의 목록 (열거)을 반환하는 방법이 있다고 가정 해 보자

IEnumerable<Employee> GetManagers() 
{ 
    return GetEmployees().Where(e => e.IsManager); 
} 

당신 이 함수를 호출하여 퇴직자에게 접근하려는 관리자를 얻고 다음과 같은 이메일을 보낼 수 있습니다.

foreach (var manager in GetManagers().Where(m => m.Age >= 65)) 
{ 
    SendPreRetirementMessage(manager); 
} 

퀴즈 : 직원 목록을 반복하는 횟수는 몇 번입니까? 대답은 정확히입니다. 전체 작업은 여전히 ​​O (n)입니다!

또한 별도의 방법이 필요하지 않습니다. 나는 한 곳에서 다음 단계로 쿼리를 작성할 수 있습니다 :

이에 대한 하나의 좋은 점은 내가 바꿀 수 있다는 것입니다
var retiringManagers = GetEmployees(); 
retiringManagers = retiringManagers.Where(e => e.IsManager); 
retiringManagers = retiringManagers.Where(m => m.Age >= 65); 
foreach (var manager in retiringMangers) 
{ 
    SendPreRetirementMessage(); 
} 

내가 포함하거나 내부 구성의 한 부분을 포함 할 수없는, 실행시에 같은입니다 if 블록을 사용하면 런타임에 특정 필터를 사용할지 여부를 결정할 수 있으며 모든 것이 여전히 멋지고 예쁘다.

+0

좋은 설명, +1 –

+0

정확하게 한 번 부분은 composability의 결과입니다, 어? – Larsenal

+0

일부입니다. 나머지는 "GetEmployees()"또는 "GetManagers()"와 같은 메서드를 사용하여보다 복잡한 새 쿼리를 작성 (작성)하는 데 효과적인 방법으로 사용할 수 있다는 것입니다. linq이 없으면 각 방법에 대한 직원 목록을 처음부터 다시 시작해야합니다. –

4

나는 당신이 그것은 당신이 쿼리에 추가 "사업자"를 추가 할 수 있다는 뜻이

var peterJacksonsTotalBoxOffice 
    = movies.Where(movie => movie.Director == "Peter Jackson") 
     .Sum(movie => movie.BoxOffice); 
관련 문제