2010-04-27 9 views
1

SharePoint의 조회 목록에서 만든 XML을 트 리뷰의 데이터 소스로 사용하려고합니다. N 계층에있을 수있다Linq to XML 조회 목록에서 생성 된 XML을 읽고 출력하십시오.

<NewDataSet> 
    <test_data> 
    <ID>1</ID> 
    <Title>MenuItem_1</Title> 
    <child_of />  
    </test_data> 
    <test_data> 
    <ID>2</ID> 
    <Title>Subitem_1</Title> 
    <Action>http://www.google.com</Action> 
    <child_of>MenuItem_1</child_of> 
    </test_data> 
    <test_data> 
    <ID>3</ID> 
    <Title>Subitem_2</Title> 
    <Action>http://www.google.com</Action> 
    <child_of>MenuItem_1</child_of> 
    </test_data> 
    <test_data> 
    <ID>4</ID> 
    <Title>MenuItem_2</Title> 
    <child_of /> 
    </test_data> 
    <test_data> 
    <ID>5</ID> 
    <Title>Subitem_2_1</Title> 
    <Action>http://www.google.com</Action> 
    <child_of>MenuItem_2</child_of> 
    </test_data> 
    <test_data> 
    <ID>6</ID> 
    <Title>Subitem_2_2</Title> 
    <Action>http://www.google.com</Action> 
    <child_of>MenuItem_2</child_of> 
    </test_data> 
    <test_data> 
    <ID>7</ID> 
    <Title>Subitem_2_2_1</Title> 
    <Action>http://www.google.com</Action> 
    <child_of>Subitem_2_2</child_of> 
    </test_data> 
</NewDataSet> 

하지만 항목은 <child_of> 요소를 통해 부모 관련 : 그것의 형태이다. C#에서 LINQ를 작성하여 메뉴 항목을 올바르게 중첩시키는 방법을 알아낼 수 없습니다. 친구가 여기 추천합니다. 어떤 도움이라도 대단히 감사합니다.

+0

함께 작업중인 treeview는 무엇입니까? 이 ASP.NET, WinForms, WPF, Silverlight입니까? treeview의 데이터 소스로 설정 한 단일 LINQ 쿼리의 결과를 반환하기를 원하십니까? 또는 몇 줄의 코드에서 treeview를 채우고 싶습니까? – CoderDennis

+0

안녕하세요. Dennis - 응답 해 주셔서 감사합니다. 예, 단일 쿼리를 사용하여 Silverlight 트리 뷰에 대한 데이터 소스를 반환하기를 바랍니다. 지난 5 년 동안 C#을 사용하는 개발자 였지만 완전히 새로운 것 (Silverlight 및 LINQ)입니다. –

답변

0

당신은 이런 식으로 할 수 있지만 실제로 프로덕션 코드에 넣는 것에 대해서는 오랫동안 생각할 것입니다.

from n in testData.Elements("test_data") 
        .Aggregate(new Dictionary<string, TreeNode<string>>() 
         {{ string.Empty, new TreeNode<string>() }}, 
         (d, e) => 
         { 
          var curNode = new TreeNode<string>(e.Element("ID").Value); 
          d.Add(e.Element("Title").Value, curNode); 
          d[e.Element("child_of").Value].AddChild(curNode); 
          return d; 
         }) 
        .Values 
where n.Parent == null 
select n; 

요소의 부모 키가 "빈 문자열"이거나 소스 목록의 부모 다음에 오는 것으로 가정합니다.

개인적으로, 나는 이것 (특히 집계)을 그 자체의 방법으로 분해 할 것이다.