Queryable.OrderByDescending 方法

定义

按降序对序列的元素排序。

重载

OrderByDescending<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, IComparer<TKey>)

Source:
Queryable.cs
Source:
Queryable.cs
Source:
Queryable.cs

使用指定的比较器按降序对序列的元素排序。

C#
public static System.Linq.IOrderedQueryable<TSource> OrderByDescending<TSource,TKey> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Collections.Generic.IComparer<TKey> comparer);
C#
public static System.Linq.IOrderedQueryable<TSource> OrderByDescending<TSource,TKey> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Collections.Generic.IComparer<TKey>? comparer);

类型参数

TSource

source 的元素类型。

TKey

keySelector 表示的函数返回的键类型。

参数

source
IQueryable<TSource>

一个要排序的值序列。

keySelector
Expression<Func<TSource,TKey>>

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

comparer
IComparer<TKey>

用于比较键的 IComparer<T>

返回

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

例外

sourcekeySelectorcomparernull

示例

下面的代码示例演示如何使用 OrderByDescending<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, IComparer<TKey>) 通过自定义比较器按降序对序列的元素进行排序。

C#
/// <summary>
/// This IComparer class sorts by the fractional part of the decimal number.
/// </summary>
public class SpecialComparer : IComparer<decimal>
{
    /// <summary>
    /// Compare two decimal numbers by their fractional parts.
    /// </summary>
    /// <param name="d1">The first decimal to compare.</param>
    /// <param name="d2">The second decimal to compare.</param>
    /// <returns>1 if the first decimal's fractional part
    /// is greater than the second decimal's fractional part,
    /// -1 if the first decimal's fractional
    /// part is less than the second decimal's fractional part,
    /// or the result of calling Decimal.Compare()
    /// if the fractional parts are equal.</returns>
    public int Compare(decimal d1, decimal d2)
    {
        decimal fractional1, fractional2;

        // Get the fractional part of the first number.
        try
        {
            fractional1 = decimal.Remainder(d1, decimal.Floor(d1));
        }
        catch (DivideByZeroException)
        {
            fractional1 = d1;
        }
        // Get the fractional part of the second number.
        try
        {
            fractional2 = decimal.Remainder(d2, decimal.Floor(d2));
        }
        catch (DivideByZeroException)
        {
            fractional2 = d2;
        }

        if (fractional1 == fractional2)
            return Decimal.Compare(d1, d2);
        else if (fractional1 > fractional2)
            return 1;
        else
            return -1;
    }
}

public static void OrderByDescendingEx1()
{
    List<decimal> decimals =
        new List<decimal> { 6.2m, 8.3m, 0.5m, 1.3m, 6.3m, 9.7m };

    // Sort the decimal values in descending order
    // by using a custom comparer.
    IEnumerable<decimal> query =
        decimals.AsQueryable()
        .OrderByDescending(num => num, new SpecialComparer());

    foreach (decimal num in query)
        Console.WriteLine(num);
}

/*
    This code produces the following output:

    9.7
    0.5
    8.3
    6.3
    1.3
    6.2
*/

注解

此方法至少有一个类型的 Expression<TDelegate> 参数,其类型参数是其中一种 Func<T,TResult> 类型。 对于这些参数,可以传入 lambda 表达式,它将编译为 Expression<TDelegate>

方法 OrderByDescending<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, IComparer<TKey>) 生成一个 , MethodCallExpression 表示将调用 OrderByDescending<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, IComparer<TKey>) 自身作为构造的泛型方法。 然后,MethodCallExpressionCreateQuery<TElement>(Expression)它将 传递给 由 Provider 参数的 属性表示的 的 source 方法IQueryProvider。 调用 CreateQuery<TElement>(Expression) 的结果转换为类型 IOrderedQueryable<T> 并返回。

由于执行表示调用 OrderByDescending<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, IComparer<TKey>) 的表达式树而发生的查询行为取决于参数类型的 source 实现。 预期行为是,它根据 通过调用 keySelector 的每个 元素source获得的键,按降序对 的source元素进行排序。 参数 comparer 用于比较键。

适用于

.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 2.0, 2.1
UWP 10.0

OrderByDescending<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>)

Source:
Queryable.cs
Source:
Queryable.cs
Source:
Queryable.cs

根据键按降序对序列的元素进行排序。

C#
public static System.Linq.IOrderedQueryable<TSource> OrderByDescending<TSource,TKey> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector);

类型参数

TSource

source 的元素类型。

TKey

keySelector 表示的函数返回的键类型。

参数

source
IQueryable<TSource>

一个要排序的值序列。

keySelector
Expression<Func<TSource,TKey>>

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

返回

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

例外

sourcekeySelectornull

注解

此方法至少有一个类型的 Expression<TDelegate> 参数,其类型参数是其中一种 Func<T,TResult> 类型。 对于这些参数,可以传入 lambda 表达式,它将编译为 Expression<TDelegate>

方法 OrderByDescending<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>) 生成一个 , MethodCallExpression 表示将调用 OrderByDescending<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>) 自身作为构造的泛型方法。 然后,MethodCallExpressionCreateQuery<TElement>(Expression)它将 传递给 由 Provider 参数的 属性表示的 的 source 方法IQueryProvider。 调用 CreateQuery<TElement>(Expression) 的结果转换为类型 IOrderedQueryable<T> 并返回。

由于执行表示调用 OrderByDescending<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>) 的表达式树而发生的查询行为取决于参数类型的 source 实现。 预期行为是,它根据 通过调用 keySelector 的每个 元素source获得的键,按降序对 的source元素进行排序。

适用于

.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 2.0, 2.1
UWP 10.0