Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

Queryable.OrderByDescending<TSource, TKey>-Methode (IQueryable<TSource>, Expression<Func<TSource, TKey>>, IComparer<TKey>)

 

Sortiert die Elemente einer Sequenz mithilfe eines angegebenen Vergleichs in absteigender Reihenfolge.

Namespace:   System.Linq
Assembly:  System.Core (in System.Core.dll)

public static IOrderedQueryable<TSource> OrderByDescending<TSource, TKey>(
	this IQueryable<TSource> source,
	Expression<Func<TSource, TKey>> keySelector,
	IComparer<TKey> comparer
)

Parameter

source

Eine Sequenz von anzuordnenden Werten.

keySelector

Eine Funktion zum Extrahieren eines Schlüssels aus einem Element.

comparer

Ein IComparer<T> zum Vergleichen von Schlüsseln.

Rückgabewert

Type: System.Linq.IOrderedQueryable<TSource>

Ein IOrderedQueryable<T>, dessen Elemente in absteigender Reihenfolge nach einem Schlüssel sortiert werden.

Typparameter

TSource

Der Typ der Elemente von source.

TKey

Der Typ des Schlüssels, der von der durch keySelector dargestellten Funktion zurückgegeben wird.

Exception Condition
ArgumentNullException

source, keySelector oder comparer ist null.

Diese Methode verfügt über mindestens einen Parameter vom Typ Expression<TDelegate>, dessen Typargument einer der Func<T, TResult>-Typen ist.Für diese Parameter können Sie einen Lambda-Ausdruck übergeben, und dieser wird zu einer Expression<TDelegate> kompiliert.

Die OrderByDescending<TSource, TKey>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, IComparer<TKey>)-Methode generiert einen MethodCallExpression, der den Aufruf von OrderByDescending<TSource, TKey>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, IComparer<TKey>) durch sich selbst als konstruierte generische Methode darstellt.Anschließend übergibt sie die MethodCallExpression an die CreateQuery<TElement>(Expression)-Methode des IQueryProvider, der von der Provider-Eigenschaft des source-Parameters dargestellt wird.Das Ergebnis des Aufrufs von CreateQuery<TElement>(Expression) wird in den Typ IOrderedQueryable<T> umgewandelt und zurückgegeben.

Das Abfrageverhalten, das durch das Ausführen einer Ausdrucksbaumstruktur auftritt, die einen Aufruf von OrderByDescending<TSource, TKey>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, IComparer<TKey>) darstellt, hängt von der Implementierung des Typs des source-Parameters ab.Es wird erwartet, dass die Elemente von source anhand des Schlüssels, der durch den Aufruf von keySelector für jedes Element von source ermittelt wird, in absteigender Reihenfolge sortiert werden.Schlüssel werden mithilfe des comparer-Parameters verglichen.

Im folgenden Codebeispiel wird veranschaulicht, wie Sie mit OrderByDescending<TSource, TKey>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, IComparer<TKey>) die Elemente einer Sequenz unter Verwendung eines benutzerdefinierten Vergleichs in absteigender Reihenfolge sortieren.

/// <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
*/

Universal Windows Platform
Verfügbar seit 4.5
.NET Framework
Verfügbar seit 3.5
Portable Class Library
Unterstützt in: portable .NET platforms
Silverlight
Verfügbar seit 2.0
Windows Phone Silverlight
Verfügbar seit 7.1
Windows Phone
Verfügbar seit 8.1
Zurück zum Anfang
Anzeigen: