【发布时间】:2011-01-05 12:45:53
【问题描述】:
我尝试按属性值对我的 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 的答案对我不起作用。
我正在为 Windows Phone 7 使用 MVS 2010。
如果有任何帮助,我将不胜感激。
--
更新
感谢您的快速回复!
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);
是否有其他方式(更优雅)使用OrderBy 修改data 而不是创建datatemp?
【问题讨论】:
-
你能说得更具体一点吗?
-
您是在捕获
OrderBy的结果还是希望它修改data? -
我知道这是一个古老的问题。但是您可以通过添加 .ToList() 或 .ToArray() 来避免 datatemp 变量,如 Dima 所说。
stuff.OrderBy(...).ToList()防止您的 IEnumerable 在添加到人员时为空。
标签: c# xml linq sorting windows-phone-7