2009-05-06 3 views
1

의 하위 트리를 선택하는 클래스를 LINQ 표현을 쓰기 주어진 컨트롤에 대해? 예를 들어 나무는 다음과 같습니다 경우 :감안할 항목

GridA1 
    PanelA1 
    TextBoxA1 
    TextBoxA2 
    PanelA2 
     ListBoxA1 
     ListBoxA2 
GridB1 
    PanelB1 
    TextBoxB1 

나는 쿼리를하고자하는 목록의 모든 TextBoxA1, TextBoxA2을 PanelA1와 파라미터 반환 할 수 있습니다 생성하라 설정 부모와 아동의 특성을 가진 컨트롤 위에 포함 myControls을 부여 , PanelA2, ListBoxA1 및 ListBoxA2. linq 함께 할 수있는 효율적인 방법 있는가? 데이터베이스에서 트리 구조를 선택하고 재귀 함수보다 하위 트리를 분리하는 더 좋은 방법을 찾고 있습니다.

답변

2

람다식이 정의되기 전에 람다식이 자체 재귀 적이 될 수 없기 때문에 LINQ를 사용하면 대단히 예쁜 방식으로하기가 어렵습니다. (아마도 LINQ를 사용하는) 재귀 함수가 최선의 방법입니다.

나는 그것을 구현하는 것 방법 :

public IEnumerable<Control> ChildrenOf(this IEnumerable<Control> controls) 
{ 
    return controls.SelectMany(c => 
     new Control[] { c }.Concat(ChildrenOf(c.Children))); 
}