按三个字段对IEnumerable <type>进行排序

Dan*_*don 6 c# sorting ienumerable

我已经定义了如下类型:

public class myType
{
    public string firstName { get; set; }
    public string middleName { get; set; }
    public string lastName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我有一个IEnumerable<myType>.

我想使用.OrderBy()extention来对myType列表进行排序,如下所示.

对象应按姓氏排序.如果姓氏相同,则应按名字顺序排列.如果名字相同,则应按中间名排序.

我该怎么做呢?

Mar*_*ell 17

var qry = items.OrderBy(x => x.lastName).ThenBy(x => x.firstName)
    .ThenBy(x => x.middleName);
Run Code Online (Sandbox Code Playgroud)

或者在LINQ语法中:

var qry = from x in items
          orderby x.lastName, x.firstName, x.middleName
          select x;
Run Code Online (Sandbox Code Playgroud)

  • @KeithS:它不必返回一个字符串.它可以是返回值的任何值,只要可以比较值以便稍后进行排序.是的,OrderBy确实*稳定. (2认同)

Pos*_*Man 7

myList.OrderBy(t => t.lastName).ThenBy(t => t.firstName).ThenBy(t => t.middleName)
Run Code Online (Sandbox Code Playgroud)

此外,每个OrderByThenBy有一个Descending版本,所以OrderByDescendingThenByDescending