2010-05-02 4 views
1

LINQ to SQL .Count는 처리 시간이 많이 걸리고 성능이 저하됩니다.LINQ to SQL .Count는 처리 시간이 많이 걸리고 성능이 저하됩니다.

나는 하나의 자식 (부모라고 부를 수 있음)에 대해 재귀 루프를 수행하고 있는데, 자식을 포함할지 여부를 결정하기 위해 자식 수를 확인해야합니다.

는 백작은 120 부모 레코드 8 MS :(.

어떤 아이디어가 빨리. 만들

+0

생성 된 SQL을 게시 할 수 있습니까? –

+0

몇 개의 항목을 계산합니까? 당신이 접근 한 모범을 보여줄 수 있습니까? – Brettski

+0

일부 코드 게시 - 실제 코드가 너무 크거나 게시 할 수없는 경우 동일한 동작으로 작은 예제를 작성하면 더 나은 답변을 얻을 수 있습니다. –

답변

2

당신은 부모와 자식 요소의 수를 점점 데이터베이스에서 투사를 선택할 수 너무 느립니다 그것은 당신이 옆에 원하는대로.이 데이터베이스에 트립 라운드 피할 수있다.이 결과 이상과에

var query = from x in DataContext.Parents 
      select new {Parent = x, Count = x.Childs.Count() }; 
이제

루프.

y를하는 경우 OU 그냥 필터링 할 (= 절 곳) 아이 요소 수에 따라 다음과 같이 그것을 : SQL 꽤 확대됨에 있어야 할 SELECT COUNT(*)IEnumerable.Count()로 통화를 번역하려고합니다

var query = from x in DataContext.Parents 
      where c.Childs.Count() > 10 
      select x; 

Linq에에.

2

결과 집합에 대해 반복적으로 수행하는 것처럼 들리는가 다른 각 결과에 대한 Linq-to-SQL 쿼리. 이 경우 많은 추가 데이터베이스 왕복을 수행 할 것이기 때문에 속도가 느려질 것입니다.

질문을 다시 작성하여 첫 번째 쿼리에서 바로 자녀 수를 함께 계산해야합니다.

+0

다른 Linq-to-SQL 부모 및 자식 엔터티 집합이 있습니다 – soldieraman

+0

그냥 자식 참조에 대한 'Count()'호출은 참으로 또 다른 linq-to-sql 쿼리입니다 (아주 간단하지만). 데이터베이스에 대한 다른 SQL 쿼리 왕복이 발생합니다. –

+0

자네가 해결할 더 좋은 방법을 제안 해 주시겠습니까? – soldieraman