📅  最后修改于: 2023-12-03 15:32:39.395000             🧑  作者: Mango
在使用LINQ时,经常需要对结果进行排序。使用LINQ进行排序的一个很好的选择是使用 OrderBy
方法。但是,当需要按不同的条件进行排序时,可以使用 When
和 Then
方法来生成更复杂的排序表达式。
When
和 Then
?使用 When
和 Then
在多条件排序时非常有用。例如,如果要按名字和姓氏对人员进行排序,可以使用如下的代码:
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}");
}
这将按照城市(非空值优先)、州(非空值优先)和国家(非空值优先)的顺序对人员进行排序。
以下是一个使用 When
和 Then
进行复杂排序的示例。首先,我们将创建一个包含人员信息的列表:
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