Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对IEnumerable进行排序<;类型>;按三个字段_C#_Sorting_Ienumerable - Fatal编程技术网

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)