LINQ OrderBy具有多个字段
我有一个列表,我需要按两个字段排序。 我试过在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.
你需要使用ThenBy
:
listOfPeople.OrderBy(person => person.LastName)
.ThenBy(person => person.FirstName)
如果您想使用方法语法,请像其他人一样使用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()
。
您的后续字段应使用ThenBy()方法进行排序
链接地址: http://www.djcxy.com/p/34231.html上一篇: LINQ OrderBy with more than one field
下一篇: What's the hardest or most misunderstood aspect of LINQ?