2013-03-20 2 views
1

저는 EF/Linq-To-SQL을 처음 사용합니다. 이전에 IQueryable은 게으른 평가를한다는 점에서 IEnumerable보다 유익하다는 것을 이전에 읽었습니다. 다음의 간단한 예제를 참조하십시오.IQueryable Evaluation

var records = db.Employees.Where(x => x.EmployeeID == "3"); 

if (records.Any()) 
{ 
    var topRecord = records.First(); 
} 

IQueryable 표현식이 두 번 평가됩니까? 결과 집합의 요소를 한 번 확인하고 첫 번째 요소를 검색 할 때 한 번? 그렇다면 그러한 선택을 수행하는보다 효율적인 방법이 있습니까?

답변

4

예,이 경우 쿼리는 두 번 실행됩니다. 먼저 Any을 입력 한 다음 First을 입력합니다.

당신은 아마 대신 FirstOrDefault을 사용할 수

var topRecord = db.Employees.FirstOrDefault(x => x.EmployeeID == "3"); 
// topRecord will be null if there's no match 

if (topRecord != null) 
{ 
    ... 
} 
+0

일을 : 내 (잘못된) 대답을 삭제. 나는 평가 결과를 "Any"에 부울 값으로 글로 나타내었다. –

+0

@LukeH 귀하의 게시물을 편집하여 FirstOrDefault가 하나의 쿼리 만 실행하는 것을 도와 줄 경우 – Matten