📜  linq when name then orderby (1)

📅  最后修改于: 2023-12-03 15:32:39.395000             🧑  作者: Mango

LINQ排序 - 使用When/Then和OrderBy

在使用LINQ时,经常需要对结果进行排序。使用LINQ进行排序的一个很好的选择是使用 OrderBy 方法。但是,当需要按不同的条件进行排序时,可以使用 WhenThen 方法来生成更复杂的排序表达式。

为什么选择 WhenThen

使用 WhenThen 在多条件排序时非常有用。例如,如果要按名字和姓氏对人员进行排序,可以使用如下的代码:

var sortedPeople = people.OrderBy(p => p.LastName)
                         .ThenBy(p => p.FirstName);

foreach (var person in sortedPeople)
{
    Console.WriteLine($"{person.LastName}, {person.FirstName}");
}

这将按照姓和名字的字典顺序对人员进行排序。但是,如果要按照不同的条件进行排序,例如,如果要按照城市、州和国家对人员进行排序,可以使用如下的代码:

var sortedPeople = people.OrderBy(p => p.City != null)
                         .ThenBy(p => p.City)
                         .ThenBy(p => p.State != null)
                         .ThenBy(p => p.State)
                         .ThenBy(p => p.Country != null)
                         .ThenBy(p => p.Country);

foreach (var person in sortedPeople)
{
    Console.WriteLine($"{person.City}, {person.State}, {person.Country}");
}

这将按照城市(非空值优先)、州(非空值优先)和国家(非空值优先)的顺序对人员进行排序。

代码示例

以下是一个使用 WhenThen 进行复杂排序的示例。首先,我们将创建一个包含人员信息的列表:

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string Country { get; set; }
}

var people = new List<Person>
{
    new Person
    {
        FirstName = "Bob",
        LastName = "Smith",
        City = "New York",
        State = "NY",
        Country = "USA"
    },
    new Person
    {
        FirstName = "Jane",
        LastName = "Doe",
        City = "Los Angeles",
        State = "CA",
        Country = "USA"
    },
    new Person
    {
        FirstName = "John",
        LastName = "Doe",
        City = "Portland",
        State = "OR"
    },
    new Person
    {
        FirstName = "James",
        LastName = "Johnson",
        Country = "Canada"
    }
};

然后,我们可以使用以下代码来按照城市、州和国家对人员进行排序:

var sortedPeople = people.OrderBy(p => p.City != null)
                         .ThenBy(p => p.City)
                         .ThenBy(p => p.State != null)
                         .ThenBy(p => p.State)
                         .ThenBy(p => p.Country != null)
                         .ThenBy(p => p.Country);

foreach (var person in sortedPeople)
{
    Console.WriteLine($"{person.City ?? "null"}, {person.State ?? "null"}, {person.Country ?? "null"}");
}

输出将如下所示:

Los Angeles, CA, USA
New York, NY, USA
Portland, OR, null
null, null, Canada