Enumerable.ThenByDescending 方法

定义

按降序对序列中的元素执行后续排序。

重载

ThenByDescending<TSource,TKey>(IOrderedEnumerable<TSource>, Func<TSource,TKey>)

根据某个键按降序对序列中的元素执行后续排序。

ThenByDescending<TSource,TKey>(IOrderedEnumerable<TSource>, Func<TSource,TKey>, IComparer<TKey>)

使用指定的比较器按降序对序列中的元素执行后续排序。

ThenByDescending<TSource,TKey>(IOrderedEnumerable<TSource>, Func<TSource,TKey>)

Source:
OrderBy.cs
Source:
OrderBy.cs
Source:
OrderBy.cs

根据某个键按降序对序列中的元素执行后续排序。

C#
public static System.Linq.IOrderedEnumerable<TSource> ThenByDescending<TSource,TKey> (this System.Linq.IOrderedEnumerable<TSource> source, Func<TSource,TKey> keySelector);

类型参数

TSource

source 的元素类型。

TKey

keySelector 返回的键的类型。

参数

source
IOrderedEnumerable<TSource>

一个包含要排序的元素的 IOrderedEnumerable<TElement>

keySelector
Func<TSource,TKey>

用于从每个元素中提取键的函数。

返回

一个 IOrderedEnumerable<TElement>,将根据键按降序对其元素进行排序。

例外

sourcekeySelectornull

注解

此方法通过使用延迟执行来实现。 即时返回值是一个对象,用于存储执行操作所需的所有信息。 在通过直接调用GetEnumerator其方法或通过在 C# For Eachforeach Visual Basic 中使用 来枚举对象之前,不会执行此方法表示的查询。

若要按元素本身的值对序列进行排序,请在 C# 或 Function(x) x Visual Basic keySelector) 中指定标识函数 (x => x

ThenBy 定义 和 ThenByDescending 以扩展类型 IOrderedEnumerable<TElement>,这也是这些方法的返回类型。 此设计使你能够通过应用任意数量的 ThenByThenByDescending 方法来指定多个排序条件。

备注

由于 IOrderedEnumerable<TElement> 继承自 IEnumerable<T>,因此可以在对 OrderByOrderByDescendingThenByOrderByDescending 的调用结果上调用 OrderByThenByDescending。 这样做会引入一个新的主排序,该排序会忽略以前建立的排序。

此排序方法使用默认比较器 Default比较键。

此方法执行稳定排序;也就是说,如果两个元素的键相等,则保留元素的顺序。 相反,不稳定排序不会保留具有相同键的元素的顺序。

在 C# 查询表达式语法中, orderby [first criterion], [second criterion] descending 子句转换为 的 ThenByDescending调用。

在 Visual Basic 查询表达式语法中, Order By [first criterion], [second criterion] Descending 子句转换为 的 ThenByDescending调用。

另请参阅

适用于

.NET 9 和其他版本
产品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

ThenByDescending<TSource,TKey>(IOrderedEnumerable<TSource>, Func<TSource,TKey>, IComparer<TKey>)

Source:
OrderBy.cs
Source:
OrderBy.cs
Source:
OrderBy.cs

使用指定的比较器按降序对序列中的元素执行后续排序。

C#
public static System.Linq.IOrderedEnumerable<TSource> ThenByDescending<TSource,TKey> (this System.Linq.IOrderedEnumerable<TSource> source, Func<TSource,TKey> keySelector, System.Collections.Generic.IComparer<TKey> comparer);
C#
public static System.Linq.IOrderedEnumerable<TSource> ThenByDescending<TSource,TKey> (this System.Linq.IOrderedEnumerable<TSource> source, Func<TSource,TKey> keySelector, System.Collections.Generic.IComparer<TKey>? comparer);

类型参数

TSource

source 的元素类型。

TKey

keySelector 返回的键的类型。

参数

source
IOrderedEnumerable<TSource>

一个包含要排序的元素的 IOrderedEnumerable<TElement>

keySelector
Func<TSource,TKey>

用于从每个元素中提取键的函数。

comparer
IComparer<TKey>

用于比较键的 IComparer<T>

返回

一个 IOrderedEnumerable<TElement>,将根据键按降序对其元素进行排序。

例外

sourcekeySelectornull

示例

下面的代码示例演示如何使用 ThenByDescending<TSource,TKey>(IOrderedEnumerable<TSource>, Func<TSource,TKey>, IComparer<TKey>) 通过自定义比较器以降序对序列中的元素执行二次排序。

C#
public class CaseInsensitiveComparer : IComparer<string>
{
    public int Compare(string x, string y)
    {
        return string.Compare(x, y, true);
    }
}

public static void ThenByDescendingEx1()
{
    string[] fruits = { "apPLe", "baNanA", "apple", "APple", "orange", "BAnana", "ORANGE", "apPLE" };

    // Sort the strings first ascending by their length and
    // then descending using a custom case insensitive comparer.
    IEnumerable<string> query =
        fruits
        .OrderBy(fruit => fruit.Length)
        .ThenByDescending(fruit => fruit, new CaseInsensitiveComparer());

    foreach (string fruit in query)
    {
        Console.WriteLine(fruit);
    }
}

/*
    This code produces the following output:

    apPLe
    apple
    APple
    apPLE
    orange
    ORANGE
    baNanA
    BAnana
*/

注解

此方法通过使用延迟执行来实现。 即时返回值是一个对象,用于存储执行操作所需的所有信息。 在通过直接调用GetEnumerator其方法或通过在 C# For Eachforeach Visual Basic 中使用 来枚举对象之前,不会执行此方法表示的查询。

若要按元素本身的值对序列进行排序,请在 C# 或 Function(x) x Visual Basic keySelector) 中指定标识函数 (x => x

ThenBy 定义 和 ThenByDescending 以扩展类型 IOrderedEnumerable<TElement>,这也是这些方法的返回类型。 此设计使你能够通过应用任意数量的 ThenByThenByDescending 方法来指定多个排序条件。

备注

由于 IOrderedEnumerable<TElement> 继承自 IEnumerable<T>,因此可以在对 OrderByOrderByDescendingThenByOrderByDescending 的调用结果上调用 OrderByThenByDescending。 这样做会引入一个新的主排序,该排序会忽略以前建立的排序。

如果 comparernull,则使用默认比较器 Default 来比较键。

此方法执行稳定排序;也就是说,如果两个元素的键相等,则保留元素的顺序。 相反,不稳定排序不会保留具有相同键的元素的顺序。

适用于

.NET 9 和其他版本
产品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0