2014-04-24 3 views
1

엔티티 프레임 워크와 linq를 사용하고 for 루프를 사용하지 않고 부모 배열을 반환하려고합니다. 기본적으로 여기에 직면 한 것과 같은 예제가 있습니다 (실제 예제는 제공 할 수 없지만 이것은 동일한 것입니다). 사람이 있고 그 사람을 검색 할 때 그 사람의 조상을 찾으려고합니다 (남성 전용). 그래서 "아버지"재산이 null이 될 때까지 다시 돌아가서 배열 할 것입니다. 즉, 우리는 그 사람의 아버지가 누구인지 모릅니다. Entity Framework에서이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 내가 for 루프로 이런 짓을 했을까 방법객체가있는 부모 목록 반환

class Person() 
{ 
    public string Name { get; set; } 
    public Guid FatherId { get; set; } 
    public virtual Person Father { get; set; } 
} 

class PersonDto() 
{ 
    public string Name { get; set; } 
    public IEnumerable<PersonDto> Ancestors { get; set; } 
} 

입니다 :

Person person = Context.People.Find(personId); 
PersonDto personDto = person.ToDto(); 

Person father = person.Father; 

while (father != null) 
{ 
    personDto.Ancestors.Add(father.ToDto()); 
    father = father.Father; 
} 
+0

당신이하려고하는 것에 대한 코드 예제를 제공한다면 이것이 더 명확해질 것입니다. 어쩌면 이것을 for 루프로 조롱 한 다음 루프를 돌아 다닐 수 있도록 도울 수 있습니까? 우리가 계속하기에 충분한 정보가 여기에 없습니다. – pquest

+0

의견을 보내 주셔서 감사합니다. 희망 하시겠습니까? – GBreen12

+0

LINQ에서 가장 많이 할 수있는 것은 부모 속성을 포함하는 것입니다. 그러면 원래 Person 객체에 부모가 있고 그 다음 조상을 만드는 루프가 생깁니다. –

답변

2

내 (아버지를 참조하여 사람이 테이블에 외래 키가 있다고 가정하면 다음

은 예입니다 같은 테이블), 그리고 SQL Server를 사용하여 영속성을 유지하고 있다면이 작업을 수행하기 위해 공통 테이블식이 포함 된 저장 프로 시저를 사용하는 것이 가장 좋을 것입니다.

http://blogs.msdn.com/b/simonince/archive/2007/10/17/hierarchies-with-common-table-expressions.aspx

당신은 그 부모가 실제로에 설정되어 있는지 (추가 보너스로), 당신은 또한 찾을해야 SP를 실행하고 "사람"의 집합을 반환로 가져 오기를 설정하는 EF를 사용하는 경우 사물.