2011-03-01 3 views
3

DB 테이블에 이미 필터링 된 요소 컬렉션을 반환하는 일부 메서드를 준비하고 이러한 컬렉션에 대해 쿼리를 실행하려고합니다. 첫 번째 필터링을 별도의 명령문으로 실행할지 또는 조인할지 궁금합니다.Entity Framework : Multiple Where 문 실행 계획

public IQueryable<Person> GetAlivePersons(){ 
    return db.Persons.Where(p => !p.IsDeceased); 
} 

public IQueryable<Person> GetElderPeople(){ 
    return GetAlivePersons().Where(p => p.Age > 75); 
} 

는 두 번째 방법은 한 번 또는 두 번 DB를 공격 할 것인가?

감사

답변

2

IQueryable는 당신이 결과 수집에 접근하는 경우에만 SQL로 변환됩니다. 코드가 DB에 한 번 도달했기 때문입니다. This topic은이 점을 설명합니다

+0

언제든지 'ObejctQuery'로 변환하고'ToTraceString'을 호출하면 SQL을 얻을 수 있습니다. 그러나 다른 linq 쿼리와 마찬가지로 실행 취소에 대한 규칙이 동일합니다. 컬렉션을 반복하거나 ToList 또는 First와 같은 메서드를 호출하여 쿼리를 실행해야합니다. –

+0

글쎄, 그건 몇 가지 편리한 방법 (ToTraceString), 나는 그것이 존재 몰랐다. 고마워. – willvv