排序自定义对象列表

时间:2012-11-07 23:04:22

标签: c#

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

我按如下方式创建了一个List:

var People = List<Person>

我想要做的是按字母顺序按人员的LastName属性对人进行排序。

看了一些例子,我试过了

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

但它不起作用。

3 个答案:

答案 0 :(得分:13)

使用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));

答案 1 :(得分:2)

最简单的方法是使用ToList():

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

您需要ToList来创建新的有序List<Person>

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

People.Sort((p1,p2) => p1.LastName.CompareTo(p2.LastName));

答案 2 :(得分:0)

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

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