我有一个列表,我需要按两个字段排序。我尝试在LINQ中使用OrderBy,但这只允许我指定一个字段。我正在寻找要按第一个字段排序的列表,然后如果第一个字段中有任何重复项要按第二个字段排序。
例如,我希望结果看起来像这样(按姓氏排序,然后按名字排序)。
我已经看到你可以使用SQL like syntax to accomplish this,但我正在寻找一种方法来使用OrderBy方法。
IList<Person> listOfPeople = /*The list is filled somehow.*/
IEnumerable<Person> sortedListOfPeople = listOfPeople.OrderBy(aPerson => aPerson.LastName, aPerson.FirstName); //This doesn't work.
答案 0 :(得分:143)
您需要使用ThenBy
:
listOfPeople.OrderBy(person => person.LastName)
.ThenBy(person => person.FirstName)
答案 1 :(得分:23)
如果您想使用方法语法,请使用其他人建议的ThenBy()
:
listOfPeople.OrderBy(person => person.LastName)
.ThenBy(person => person.FirstName)
在查询语法中,可以按照您想要的方式完成相同的操作:两个以逗号分隔的排序键:
from person in listOfPeople
orderby person.LastName, person.FirstName
select person
上面的代码实际上会编译为使用OrderBy()
和ThenBy()
的代码,如第一个示例所示。
此外,如果您希望OrderBy()
使用两个(或更多)排序键,您当然可以将其作为内部调用IEnumerable<T>
OrderBy()
的扩展方法编写。和ThenBy()
。
答案 2 :(得分:2)
您的后续字段应使用ThenBy()方法
进行排序答案 3 :(得分:1)
使用.ThenBy(aPerson=>field2);
答案 4 :(得分:1)
var sortedListOfPeople = listOfPeople.OrderBy(aPerson => aPerson.LastName).ThenBy(a => aPerson.FirstName);
答案 5 :(得分:0)
订购包含更多字段的列表的方法如下:
var soterdList = initialList.OrderBy(x => x.Priority).
ThenBy(x => x.ArrivalDate).
ThenBy(x => x.ShipDate);
您可以使用clasole“ThenBy”
添加其他字段