我有一个名为Person的类,它包含一个属性LastName,它反映了一个与Person的姓氏相对应的字符串。
我按如下方式创建了一个List:
var People = List<Person>
我想要做的是按字母顺序按人员的LastName属性对人进行排序。
看了一些例子,我试过了
People = People.OrderBy(p => p.LastName);
但它不起作用。
答案 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();