OrderByDescending(TSource, TKey) Methode (IEnumerable(TSource), Func(TSource, TKey), IComparer(TKey))
Inhaltsverzeichnis reduzieren
Inhaltsverzeichnis erweitern
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

Enumerable.OrderByDescending<TSource, TKey>-Methode (IEnumerable<TSource>, 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 IOrderedEnumerable<TSource> OrderByDescending<TSource, TKey>(
	this IEnumerable<TSource> source,
	Func<TSource, TKey> keySelector,
	IComparer<TKey> comparer
)

Parameter

source
Type: System.Collections.Generic.IEnumerable<TSource>

Eine Sequenz von anzuordnenden Werten.

keySelector
Type: System.Func<TSource, TKey>

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

comparer
Type: System.Collections.Generic.IComparer<TKey>

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

Rückgabewert

Type: System.Linq.IOrderedEnumerable<TSource>

Ein IOrderedEnumerable<TElement> dessen Elemente in absteigender Reihenfolge nach einem Schlüssel sortiert werden.

Typparameter

TSource

Der Typ der Elemente von source.

TKey

Der Typ des von keySelector zurückgegebenen Schlüssels.

Exception Condition
ArgumentNullException

source oder keySelector ist null.

Diese Methode wird mit verzögerter Ausführung implementiert. Der sofortige Rückgabewert ist ein Objekt, das alle Informationen gespeichert hat, die zum Ausführen der Aktion erforderlich sind. Die von dieser Methode dargestellte Abfrage wird nicht ausgeführt, bis das Objekt aufgelistet wird, entweder durch Aufrufen der GetEnumerator -Methode direkt oder mithilfe von foreach in Visual C# oder For Each in Visual Basic.

Um eine Sequenz nach den Werten der Elemente selbst zu sortieren, geben Sie die Identity-Funktion (x => x in Visual C# oder Function(x) x in Visual Basic) für keySelector.

Sind zwei Methoden definiert, um den Typ erweitern IOrderedEnumerable<TElement>, dies ist der Rückgabetyp dieser Methode. Diese zwei Methoden, nämlich ThenBy und ThenByDescending, können Sie zusätzliche Kriterien zum Sortieren einer Sequenz angeben. ThenBy und ThenByDescending auch Zurückgeben einer IOrderedEnumerable<TElement>, was bedeutet, dass eine beliebige Anzahl aufeinander folgender Aufrufe von ThenBy oder ThenByDescending erfolgen.

System_CAPS_noteHinweis

Da IOrderedEnumerable<TElement> erbt von IEnumerable<T>, rufen Sie OrderBy oder OrderByDescending auf die Ergebnisse eines Aufrufs von OrderBy, OrderByDescending, ThenBy oder ThenByDescending. Auf diese Weise führt eine neue primäre Sortierung, die die zuvor festgelegte Sortierung ignoriert.

Wenn comparer ist null, der Standardvergleich Default zum Vergleichen von Schlüsseln verwendet wird.

Diese Methode führt eine stabile Sortierung. Das heißt, ist die Schlüssel der zwei Elemente gleich sind, die Reihenfolge der Elemente beibehalten. Im Gegensatz dazu behält eine instabile Sortierung die Reihenfolge der Elemente nicht den gleichen Schlüssel verfügen.

Im folgenden Codebeispiel wird veranschaulicht, wie Sie OrderByDescending<TSource, TKey>(IEnumerable<TSource>, Func<TSource, TKey>, IComparer<TKey>) zum Sortieren der Elemente einer Sequenz in absteigender Reihenfolge unter Verwendung einer Transformationsfunktion sowie eines benutzerdefinierten Vergleichs.

/// <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 };

    IEnumerable<decimal> query =
        decimals.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 8
.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.0
Windows Phone
Verfügbar seit 8.1
Zurück zum Anfang
Anzeigen:
© 2016 Microsoft