2011-01-05 3 views
2

행운을 빌어 속성 값으로 XML 파일을 정렬하려고했습니다.속성 값으로 linq에서 XML 문서를 정렬하는 방법은 무엇입니까?

data.Descendants("person").OrderBy(x => x.Attribute("id").Value); 

데이터가 포함

<persons> 
    <person id="1"> 
    <name>Abra</name> 
    <age>25</age> 
    </person> 
    <person id="2"> 
    <name>Cadabra</name> 
    <age>29</age> 
    </person> 
    <person id="4"> 
    <name>Hokus</name> 
    <age>40</age> 
    </person> 
    <person id="3"> 
    <name>Pokus</name> 
    <age>30</age> 
    </person> 
</persons> 

대답 here 주어진 나를 위해 작동하지 않습니다.

나는 윈도우 폰 7

에 대한 MVS 2010을 사용하고 난 어떤 도움을 감사하게 될 것입니다.

-

업데이트

는 빠른 응답 해 주셔서 감사합니다!

juharr이 좋은 질문을했습니다 ... 나는 그 OrderBydata을 수정할 것이라고 기대하고있었습니다. 이제 나는 내가 틀렸다는 것을 압니다.

나는 data을 수정하려면 다음과 같이 내가 (감사 매트 레이)를 수행했습니다

var people = data.Elements("person").OrderBy(p => (string)p.Attribute("id")); 

    data.Descendants("person").Remove(); 
    data.Element("persons").Add(people); 

을하지만 난 아직 아무것도 없어. Data은 비어 있습니다. 단지 <persons />

나는 지금 무엇이 잘못된 것인지 궁금합니다.


이 코드를 사용하여 내 문제를 해결하기 위해 관리 :

XDocument datatemp = new XDocument(data); 

    var people = datatemp.Descendants("person").OrderBy(x => (int)int.Parse(x.Attribute("id").Value)); 

    data.Descendants("person").Remove(); 
    data.Element("persons").Add(people); 

수정 (더 우아) 다른 방법이 있나요 dataOrderBy를 사용하는 대신 datatemp을 만들어? 당신이에 링크 된 질문을 바탕으로

+1

"운이 없다"에 대해 더 구체적으로 설명 할 수 있습니까? – fejesjoco

+2

'OrderBy'의 결과를 포착하거나'data'를 수정하려고합니까? – juharr

+0

나는 이것이 고대의 질문이라는 것을 알고있다. 그러나 Dima가 말한 것처럼 .ToList() 또는 .ToArray()를 추가하여 datatemp 변수를 피할 수 있습니다. 'stuff.OrderBy (...) .ToList()'는 사람을 추가 할 때 IEnumerable이 비어있는 것을 방지합니다. – Mixxiphoid

답변

1

이 작동 :

var people = from p in data.Elements("person") 
      orderby (string)p.Attribute("id") 
      select p; 

또는

var people = data.Elements("person").OrderBy(p => (string)p.Attribute("id")); 

(전화 테스트도 확인합니다.)

+0

int.sort의 string.sort로 정렬됩니까? –

1

나는이 당신에게

도움이되기를 바랍니다
var people = data.Elements("person").OrderBy(p => (string)p.Attribute("id")).ToArray(); 

data.Descendants("person").Remove(); 
data.Element("persons").Add(people); 

people에 ToArray() 메서드를 사용합니다.

관련 문제