7

我有一个名为 Person 的类,它包含一个属性 LastName,它反映了与 Person 的姓氏相对应的字符串。

我创建了一个列表,如下所示:

var People = List<Person>

我想做的是按字母顺序按他们的姓氏属性对人们进行排序。

看了一些例子后,我试过了

People = People.OrderBy(p => p.LastName);

但它不起作用。

4

3 回答 3

15

使用 LINQ,您需要将结果转换回List<Person>

People = People.OrderBy(p => p.LastName).ToList();

由于OrderBy返回一个IOrderedEnumerable<T>,您需要额外的调用ToList()才能将其转回列表。

但是,由于您实际上需要就地排序,因此您也可以List<T>.Sort直接使用:

People.Sort((p1, p2) => p1.LastName.CompareTo(p2.LastName));
于 2012-11-07T23:06:49.987 回答
2

最简单的是使用ToList():

People = People.OrderBy(p => p.LastName).ToList();

您需要ToList创建一个新的订单 List<Person>

对原始列表进行排序的另一个选项是使用List.Sort

People.Sort((p1,p2) => p1.LastName.CompareTo(p2.LastName));
于 2012-11-07T23:07:09.830 回答
0

您需要将 orderby 的结果转换为.Tolist()如下所示

var people = People.OrderBy(p => p.LastName).ToList();
于 2012-11-07T23:18:10.767 回答