2011-11-14 4 views
0

이것은 LINQ-to-SQL입니다.LINQ 쿼리로 StackOverflow 예외가 발생합니다.

얼마나 많은 레벨이 있는지 보려면 SiteCategories의 계층 적 관계를 탐색하려고합니다.

int numLevels = 1; 

//I tried setting this to new[] { parentID }.AsQueryable(); 
//but linq didn't like it 
IQueryable<int> nextBatchOfParents = _catalogdb.SiteCategories 
        .Where(c => c.SiteCategoryId == parentID) 
        .Select(c => c.SiteCategoryId); 

while ((nextBatchOfParents = _catalogdb.SiteCategoryRelationships 
     .Where(rel => nextBatchOfParents.Any(x => x == rel.ChildSiteCategoryId)) 
     .Select(rel => rel.ParentSiteCategoryId)).Any()) 
       ++numLevels; 

불행히도 루프의 첫 번째 반복은 StackOverflow 예외를 발생시킵니다. 나는이 쿼리의 대부분이나 전부를 더 빨리 구체화함으로써 내 몰래 빠져 나올 수 있다고 생각하지만이 문제를 해결할 더 좋은 방법이 있기를 바라고 있습니다.

답변

3

그 자체로 nextbatchofparents를 부르는 것 같습니다.

+1

고맙습니다. 웬일인지 당신이 그것을 쓰는 것을 보는 것은 내가 필요로했던 것이다. 나는 지금 어리 석다. –

+0

문제는 없지만 항상 발생합니다. – McKay

관련 문제