2012-02-20 1 views
1

저는 지금 EF를 처음 사용하기 때문에 약간 익숙해 져야합니다. 저는 4.2를 사용하고 있습니다. 단지 EF가 필터링 된 데이터를로드하는 것을 제한 할 수있는 최선의 방법을 알고 싶습니다. db에서 모든 데이터를 가져온 다음 필터를 적용합니다.EF DbContext.Set <T> 필터링 된 레코드 만

DbContext.Set() 또는 DbContext.Set()을 볼 수 있습니다. AsQueryable(); 즉 "Where"기능에 대해 확실하지 않지만 동일한 원리로 작동하고있는 것처럼 보입니다. 즉, 이미 주어진 테이블에 대한 모든 데이터를로드 한 다음 필터를 적용하면 성능이 크게 저하되지 않습니까? 아니면 여기에 뭔가 빠졌나요? EF가 테이블에서 모든 데이터를 가져 오지 않고 필터링 만하는 것을 원하지 않습니다. 그것에 대해 어떻게 가야합니까? 쿼리에() 어디에요를 사용하는 경우이 응용 프로그램에서이 아닌 DB 사이트에서 실행해야하므로

감사

+0

Linq 쿼리는 SQL로 변환되므로 쿼리에 .Where()를 사용하면 응용 프로그램에없는 db 사이트에서 실행해야합니다. .ToList()/.ToArray()와 같은 작업을 수행 한 다음 위에 .Where()를 적용하면 클라이언트 사이트에서 .ToList()를 적용하기 전에 쿼리 실행이 강제로 수행되므로 필터링이 수행됩니다. 필터. – Pawel

+0

@Pawel IQueryable query = _context.Set (); (filter! = null) }; // 이미 모든 데이터를로드하고있는 것을 볼 수 있습니다. 그래서 if _context.Set () .Where (filter); 그럼 충분하니? – afr0

+0

@Pawel 그것을 지워 줘서 고마워 난 그냥 당신이 말한대로 where 절을 추가 않는 SQL 프로파일 러를 확인합니다. 답을 표시하지 못했습니다. 건배 – afr0

답변

1

LINQ 쿼리는 SQL로 변환됩니다. .ToList()/.ToArray()와 같은 작업을 수행 한 다음 위에 .Where()를 적용하면 클라이언트 사이트에서 .ToList()를 적용하기 전에 쿼리 실행이 강제로 수행되므로 필터링이 수행됩니다. 필터

관련 문제