LINQ OrderBy与多个字段

我有一个列表,我需要按两个字段sorting。 我已经尝试在LINQ中使用OrderBy,但只允许我指定一个字段。 我正在寻找列表进行sorting的第一个字段,然后如果有任何重复的第一个字段sorting第二个字段。

例如,我希望结果看起来像这样(按姓氏和名字sorting)。

  • 亚当斯,约翰
  • 史密斯,詹姆斯
  • 史密斯,彼得
  • 汤普森,弗雷德

我已经看到,你可以使用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) 

在查询语法中,可以按照您想要的方式完成相同的操作:用逗号分隔的两个sorting键:

 from person in listOfPeople orderby person.LastName, person.FirstName select person 

上面的代码将被实际编译为使用OrderBy()ThenBy() ,如第一个示例中所示。

另外,如果你想要有两个(或更多)sorting键的OrderBy() ,你当然可以把它作为IEnumerable<T>的扩展方法,它在内部调用OrderBy()ThenBy()

您的后续字段应使用ThenBy()方法进行sorting

使用.ThenBy(aPerson=>field2);

 var sortedListOfPeople = listOfPeople.OrderBy(aPerson => aPerson.LastName).ThenBy(a => aPerson.FirstName); 

下面列出更多的提交清单的方法:

 var soterdList = initialList.OrderBy(x => x.Priority). ThenBy(x => x.ArrivalDate). ThenBy(x => x.ShipDate); 

您可以添加其他字段的“ThenBy”