728x90
다음과 같은 foreach 구문이 있다.
foreach (var c in customerList)
{
if (c.CustomerId == customerId)
{
foundCustomer = c;
break;
}
}
위의 foreach 구문과 같은 내용을 Linq를 이용하여 표현하면 아래와 같다.
var query = from c in customerList
where c.CustomerId == customerId
select c;foundCustomer = query.First();
두 구문을 비교해 보면, foreach의 경우는 loop를 돌면서 customerId와 같으면 loop를 빠져 나올수 있다.
하지만, 직관적인 관점에서 봤을 때 linq 구문에서는 customerList의 모든 값에 대해서 Id 값을 비교하여
같은 item에 대한 IEnumerable 값을 보낼것 같아 보인다.
하지만, Linq는 구현되어 있는 시점에서 실행이 되지 않고, linq syntax의 결과가 직접 필요한 시점에 실행이 된다.
바로 linq 구문 아래의 query.First() 이다.
query의 결과 값 중에서 첫 값만을 필요하기 때문에, 내부적으로 where 구문을 수행하다가 조건이 맞는 첫번째 값을 찾으면 return 을 수행하게 된다. 그러므로, list의 전체 값에 대한 비교를 수행하지 않는다.
728x90
728x90