3

我有一个XElementc# 中的对象列表。每个 XElement 对象都有属性index,如下所示:

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

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

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

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

4

2 回答 2

4

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

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

其次,OrderBy它不会对其操作的类型产生副作用,但它会返回一个 new 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"));
于 2013-01-05T07:15:48.410 回答
1
IEnumerable<XElement> sortShows = from s in listOfElement.Descendants()
                                  orderby (int)s.Attribute("index")
                                  select s;

请试试这个。

于 2013-01-05T07:26:35.847 回答