如何使用有时相同的条目对List <Person>进行排序?

Tor*_*enJ 2 c# sorting wpf list

我有一个关于在C#中排序的问题.

让我们假设有List<Person> personList50个项目.
每个人Person都有string forename, surname.

现在我想对这份人员名单进行排序.
首先,列表应按照排序Forename.
因此我会用这个:
personList.Sort((p1, p2)=>string.Compare(p1.Forename, p2.Forname, true));

在此之后,我想Forname用他们的相同的方式对所有条目进行排序Surname.

我怎样才能做到这一点?

编辑:@Russ Cam:这是一个示例列表.

未排序:

David Johnson
William Black
David Smith
Matthew Edwards
Jayden Anderson
Andrew Connor
Adam Johnson
Daniel Armstrong
Steve Anderson
Daniel Black
Run Code Online (Sandbox Code Playgroud)

排序方式:

Adam Johnson
Andrew Connor
Daniel Armstrong
Daniel Black
David Johnson
David Smith
Jayden Anderson
Matthew Edwards
Steve Anderson
William Black
Run Code Online (Sandbox Code Playgroud)

Rus*_*Cam 8

您可以使用LINQ的OrderBy方法来执行此操作

var sortedPersonList = personList.OrderBy(p => p.Forename).ThenBy(p => p.Surname);
Run Code Online (Sandbox Code Playgroud)

编辑:

这是一个完整的控制台应用程序,用于验证它是否按照您期望的顺序返回结果

static void Main()
{
    var personList = new List<Person>{
        new Person("David Johnson"),
        new Person("William Black"),
        new Person("David Smith"),
        new Person("Matthew Edwards"),
        new Person("Jayden Anderson"),
        new Person("Andrew Connor"),
        new Person("Adam Johnson"),
        new Person("Daniel Armstrong"),
        new Person("Steve Anderson"),
        new Person("Daniel Black")  
    };

    var sortedPersonList = personList.OrderBy(p => p.Forename).ThenBy(p => p.Surname);

    foreach (var person in sortedPersonList)
    {
        Console.WriteLine(person);
    }

    Console.Read();
}

public class Person
{
    public Person(string name)
    {
        var names = name.Split(' ');
        Forename = names[0];
        Surname = names[1];
    }

    public string Forename { get; set; }
    public string Surname { get; set; }

public override string ToString()
{
    return Forename + " " + Surname;
}
}
Run Code Online (Sandbox Code Playgroud)

写出来的

Adam Johnson
Andrew Connor
Daniel Armstrong
Daniel Black
David Johnson
David Smith
Jayden Anderson
Matthew Edwards
Steve Anderson
William Black
Run Code Online (Sandbox Code Playgroud)