2011-04-28 5 views
1

을 SQL로 LINQ를 사용하여 부모의 알 수없는 양을 얻을 :주어진 다음의

public class Person 
{ 
    public int PersonId { get; set; } 
    public int? ParentId { get; set; } 
} 

나는 다음과 같은 트리 구조가 있다고 가정 (PersonID - ParentID) : 어떻게 모든 부모

1 - null 
    2 - 1 
    3 - 2 
    4 - 1 

를 얻을 수 있습니다 PersonID의 3 또는 2,1의 LINQ to SQL 쿼리를 사용합니까?

주 : null ParentId는 최상위 사람

+0

재귀 같은 소리; 당신은 Sql 토지에서 CTE로 그런 종류의 일을 할 것이지만, Linq2Sql에 대해서는 너무 복잡하다고 생각합니다. proc을 만들고 싶을 수도 있습니다. – Tejs

+0

[계층 구조 문제 -> 재귀를 Linq 조인으로 바꿉니 까?] (0120-383-2116) – ChrisF

+0

@Chris : 그건 그렇습니다. 다른 종류의 문제. 계층 구조의 하위 항목을 검색하면 상위 항목을 검색합니다. –

답변

2

당신은 루프 (또는 재귀의 다른 형태)가 필요합니다을 의미한다.

var personId = 3 as int?; 
var result = new List<Person>(); 
do 
{ 
    var person = context.Persons.Single(p => p.PersonId == personId.Value); 
    result.Add(person); 
    personId = person.ParentId; 
} while (personId != null); 
// all ancestors are in `result` 
+0

그 방법은 알고 계십니까? http://stackoverflow.com/questions/5859520/get-unknown-amount-of-childen-using-linq-to-sql –

+0

@ 브라이언 : 개념은 동일합니다. 출발하는 사람을 데리고 부모에게가는 대신, 아이에게 가야합니다. 이 경우 부모가 대상인 사람을 찾아야합니다. 그런 다음 이들 각각에 대해 반복하십시오. –

관련 문제