我试图通过属性的值来排序我的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回答没有为我工作。
我使用MVS 2010为Windows Phone 7的
我会感谢任何帮助。
-
更新
感谢您的快速反应!
juharr问了一个很好的问题...我期待OrderBy
会修改data
。现在我知道我错了。
我想修改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);
是任何其他方式(更优雅)修改data
使用OrderBy
而不是创建datatemp
?
你能更具体地说“不幸”吗? – fejesjoco 2011-01-05 12:47:40
您是在捕获'OrderBy'的结果,还是期望修改'data'? – juharr 2011-01-05 13:24:37
我知道这是一个古老的问题。但是,如Dima所说,通过添加.ToList()或.ToArray()来避免数据变量变量。 'stuff.OrderBy(...)。ToList()'在添加到人员时阻止IEnumerable为空。 – Mixxiphoid 2014-04-02 16:48:27