나는 다음과 같은 코드가있는 경우 : -는 왜 된 IQueryable로 카운트를 실행할 수없는 것으로 간주됩니다 사용
다음IQueryable<People> list = repository.FindAllPeople;
int count = list.Count();
그것으로 실행할 수 없게 간주 된 IQueryable 개체를 카운트를하고는 IEnumerable을 사용하는 것이 좋습니다? BR
나는 다음과 같은 코드가있는 경우 : -는 왜 된 IQueryable로 카운트를 실행할 수없는 것으로 간주됩니다 사용
다음IQueryable<People> list = repository.FindAllPeople;
int count = list.Count();
그것으로 실행할 수 없게 간주 된 IQueryable 개체를 카운트를하고는 IEnumerable을 사용하는 것이 좋습니다? BR
귀하는 잘못 알고 있습니다.
IEnumerable
은 개체에 Linq를 사용하고 모든 메서드는의 개체 에서 실행됩니다. - IQueryable
은 특정 공급자가 제공하는 Linq 확장 메서드의 구현을 사용합니다. 이 경우 (저장소) 나는 Linq 식을 데이터베이스 문에 매핑하는 공급자 일 가능성이 높습니다. 카운트 쿼리 "select count(*) from People"
로 데이터베이스 자체, 즉 결정됩니다
IQueryable<People> list = repository.FindAllPeople;
int count = list.Count();
: 당신이 IQueryable
를 사용하는 경우 의미
. 이것은 대개 매우 빠릅니다.
는 IEnumerable
을 사용하는 경우 : Linq는 객체 수를 결정하기 위해 컬렉션을 반복하는 동안
IEnumerable<People> list = repository.FindAllPeople;
int count = list.Count();
모든 사람들 인스턴스가 하나의 메모리 하나에 구체화 될 것이다. 이것은 매우 느리고 가능할 때마다 피해야합니다.
는하지 때문에 모든 메소드 호출은 데이터베이스 쿼리 IEnumerable
을 사용하는 것이 때로는 피할 수 있지만, 모든 필터링, 가입 및 그룹화가 가능하면, 다음 마지막 단계에서 당신이 AsEnumerable()
를 사용할 수있는 된 IQueryable에서 수행해야 매핑 할 수 있습니다 확장 메서드를 IEnumerable
및 Linq 개체를 사용하여 전환 할 수 있습니다.
하지만 this blog post이 된 IQueryable는 기본 식에 액세스 할 수 있기 때문에 된 IQueryable 훨씬 더 바람직를 IEnumerable을 나타냅니다 보인다.
이것은 Where 절의 경우에만 관련 될 수 있으며 .Count()에는 영향을주지 않습니다.
제 경우는 아니지만 Excel 문서에서 실행 횟수가 성능에 좋지 않습니다. 약 350 행 동안 300-400ms. 그래도 고마워. 왜 그렇게 느린지 이해할 수있게 도와 줬어. –