C# 对IEnumerable进行排序<;类型>;按三个字段
我定义了一种类型,如下所示:C# 对IEnumerable进行排序<;类型>;按三个字段,c#,sorting,ienumerable,C#,Sorting,Ienumerable,我定义了一种类型,如下所示: public class myType { public string firstName { get; set; } public string middleName { get; set; } public string lastName { get; set; } } 我有一个IEnumerable 我想使用.OrderBy()扩展对我的myType列表进行如下排序 对象应按姓氏顺序排列。如果姓氏相同,则应按姓氏顺序排列。如果名字相同
public class myType
{
public string firstName { get; set; }
public string middleName { get; set; }
public string lastName { get; set; }
}
我有一个IEnumerable
我想使用.OrderBy()
扩展对我的myType列表进行如下排序
对象应按姓氏顺序排列。如果姓氏相同,则应按姓氏顺序排列。如果名字相同,则应按中间名的顺序排列
我该怎么做
var qry = items.OrderBy(x => x.lastName).ThenBy(x => x.firstName)
.ThenBy(x => x.middleName);
或使用LINQ语法:
var qry = from x in items
orderby x.lastName, x.firstName, x.middleName
select x;
此外,每个
OrderBy
和ThenBy
都有一个降序版本,因此OrderByDescending
和ThenByDescending(成员需要可访问(通常为:public
)才能对其进行排序;属性通常优先于字段)+1。请记住,lambda可以是任何返回字符串的代码,例如,您可以。执行空检查并返回一些非空的默认值。我不知道大多数.NET分拣机背后的内置快速排序将如何处理空值。另外,尽管OrderBy()声称它是一个稳定的排序,但如果它使用了,那么它就不会使用内置的sorter,该sorter还支持List.sort和Array.sort,并且不稳定。@KeithS:它不必返回字符串。它可以是任何返回值的东西,只要可以比较这些值以便以后排序。是的,OrderBy确实很稳定。
myList.OrderBy(t => t.lastName).ThenBy(t => t.firstName).ThenBy(t => t.middleName)