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?