2013-05-14 107 views
3

在c#中我正在嘗試使用OrderByDesending對XDocument進行排序。目標是讀取其中包含日期\時間戳的子節點,並對父節點重新排序。如何對基於其子的XDocument父節點進行排序?

我從已保存的文件加載XML這樣的:

XDocument Doc = new XDocument(); 
Doc= XDocument.Load(filename); 

這裏是

<KS> 
    <Team> 
    <TeamName>Knights</TeamName> 
    <TeamColor>blue</TeamColor> 
    <LastAccessed>5/9/2013 2:34:22 PM</LastAccessed> 
    </Team> 
    <Team> 
    <TeamName>Rangers</TeamName> 
    <TeamColor>red</TeamColor> 
    <LastAccessed>5/9/2013 3:49:06 PM</LastAccessed> 
    </Team> 
    <Team> 
    <TeamName>Eagles</TeamName> 
    <TeamColor>green</TeamColor>  
    <LastAccessed>5/9/2013 3:50:18 PM</LastAccessed> 
    </Team> 
</KS> 

我想重新排序依據的子元素降我的XML的例子

我試過以下沒有任何運氣

var results = Doc.Root.Descendants("Team").OrderByDescending(p => p.Element("LastAccessed")); 

XDocument node = new XDocument(Doc.Descendants("KS").OrderByDescending(x => x.Element("Team").Element("LastAccessed").Value.Trim())); 

任何建議如何根據存儲在子節點中的值對XML父節點進行排序?

+0

? –

回答

5

你應該得到一個錯誤,說:

至少一個對象必須實現IComparable。

請始終在包括這些錯誤在您的問題。

您需要提供支持IComparable接口的Team元素的子元素。您需要獲得價值,而不是.Elements爲您提供的XElement

將您的結果行更改爲下面,它將工作。

var results = Doc.Descendants("Team").OrderByDescending(p => DateTime.Parse(p.Element("LastAccessed").Value)); 
+1

所以'15/9/2013 3:50:18 PM'在'5/9/2013 3:50:18 PM'之後以降序排列? – dtb

+0

@dtb好點! –

+0

謝謝瑞安:-)這個伎倆。 – user2383244

0
var results = Doc.Root.Descendants("Team").OrderByDescending(p => (DateTime)p.Element("LastAccessed")); 
您正在使用什麼日期時間格式
相關問題