2012-02-17 1 views
1

I가 다음과 같은 데이터 객체 : 그래서LINQ - 재귀 요청

Messages: 
MessageID int, 
Text string, 
ParentMessageID int? 

, 기록 등 :

1 | "텍스트 1"| null 2 | "텍스트 1에 응답"| 1 3 | "텍스트 1에 응답 회신"| 2

...

나는 하나 개의 스레드에서 메시지 수를 계산해야합니다. LINQ가 그것을하는 방법?

+0

그렇지 않습니다. 재귀를 사용합니다. "일을위한 올바른 도구 ..." –

+0

당신은 무엇을 이미 시도 했습니까? – rene

답변

2

LINQ to Entities를 사용할 수 없습니다 : SQL을 사용하여 재귀 쿼리를 수행하기 위해 공통 테이블 식을 작성해야합니다. 이들은 매우 느린 경우가 많습니다.

항상 계층 구조의 동일한 수준에서 계산한다고 가정 할 때 가장 쉬운 해결책은 루트 ID에 대한 속성을 추가하는 것입니다.

Messages: 
MessageID int, 
Text string, 
ParentMessageID int? 
ThreadRootID int 

스레드 루트는 주어진 스레드의 모든 메시지에서 동일합니다. ThreadRootId을 가진 사람들을 쉽게 셀 수 있습니다 (재귀 쿼리보다 훨씬 성능이 좋습니다).

+0

그것에 대해 생각했지만 데이터의 중복성이 있습니다. – John

+0

예, 중복성은 때로는 좋은 것입니다 ;-) –

1

EF 용 LINQ로는 가능한지 확실하지 않습니다. 저장 프로 시저를 작성하고 EF 모델의 일부 메서드에 매핑하는 것이 좋습니다.