我有一个XElement
c# 中的对象列表。每个 XElement 对象都有属性index
,如下所示:
<A index="2" .... ></A>
<B index="4" .....></B>
...
..
现在我想根据其索引值对这些元素进行升序排序。为此,我尝试了:
listOfElement.OrderBy(e => e.Attribute("index").Value);
但是元素没有在列表中排序。我在这里做错了什么?
我有一个XElement
c# 中的对象列表。每个 XElement 对象都有属性index
,如下所示:
<A index="2" .... ></A>
<B index="4" .....></B>
...
..
现在我想根据其索引值对这些元素进行升序排序。为此,我尝试了:
listOfElement.OrderBy(e => e.Attribute("index").Value);
但是元素没有在列表中排序。我在这里做错了什么?
首先,您没有将值转换为 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"));
IEnumerable<XElement> sortShows = from s in listOfElement.Descendants()
orderby (int)s.Attribute("index")
select s;
请试试这个。