我有一个列表,我需要按两个字段排序.我尝试在LINQ中使用OrderBy,但这只允许我指定一个字段.我正在寻找要按第一个字段排序的列表,然后在第一个字段中是否有任何重复项要按第二个字段排序.
例如,我希望结果看起来像这样(按姓氏排序,然后按名字排序).
我已经看到你可以使用类似SQL的语法来完成这个,但我正在寻找一种方法来使用OrderBy方法.
IList<Person> listOfPeople = /*The list is filled somehow.*/
IEnumerable<Person> sortedListOfPeople = listOfPeople.OrderBy(aPerson => aPerson.LastName, aPerson.FirstName); //This doesn't work.
Run Code Online (Sandbox Code Playgroud)
tza*_*man 156
你需要使用ThenBy:
listOfPeople.OrderBy(person => person.LastName)
.ThenBy(person => person.FirstName)
Run Code Online (Sandbox Code Playgroud)
svi*_*ick 23
如果您想使用方法语法ThenBy(),请像其他人建议的那样使用:
listOfPeople.OrderBy(person => person.LastName)
.ThenBy(person => person.FirstName)
Run Code Online (Sandbox Code Playgroud)
在查询语法中,可以按照您想要的方式完成相同的操作:两个以逗号分隔的排序键:
from person in listOfPeople
orderby person.LastName, person.FirstName
select person
Run Code Online (Sandbox Code Playgroud)
上面的代码实际上将被编译为使用OrderBy()和的代码ThenBy(),如第一个例子中所示.
另外,如果你想有OrderBy()一个带有两个(或更多)排序键,你当然可以写上扩展方法IEnumerable<T>在内部调用OrderBy()和ThenBy().