2013-01-05 15 views
3

我有一个列表XElement c#中的对象。每一个的XElement对象有属性index,这样的事情:如何对c中的XElement列表进行排序#

<A index="2" .... ></A> 
<B index="4" .....></B> 
... 
.. 

现在我想根据其索引值按升序排列这些元素进行排序。为此我尝试过:

listOfElement.OrderBy(e => e.Attribute("index").Value); 

但是元素没有在列表中排序。我在这里做错了什么?

+0

请记住,它并没有就地订购。你在使用返回值吗? – jhewlett

回答

4

首先,您不是将值转换为int。这是在这种情况下无害的,但你可能想要做的:

e => (int)e.Attribute("index") 

其次,OrderBy不会做就可以运行在类型副作用,但它返回一个新IEnumerable<T>。您可以通过书面形式覆盖您以前的列表:

listOfElement = listOfElement.OrderBy(e => (int)e.Attribute("index")). 
        ToList(); 

或者,你可以使用List<T>.Sort(Comparison<XElement>)方法是这样的:

listOfElement.Sort((e1, e2) => 
      (int)e1.Attribute("index") - (int)e2.Attribute("index")); 
1
IEnumerable<XElement> sortShows = from s in listOfElement.Descendants() 
            orderby (int)s.Attribute("index") 
            select s; 

请试试这个。