Exportieren (0) Drucken
Alle erweitern
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

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
)

Typparameter

TSource

Der Typ der Elemente von source.

TKey

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

Parameter

source
Typ: System.Collections.Generic.IEnumerable<TSource>
Eine Sequenz von anzuordnenden Werten.
keySelector
Typ: System.Func<TSource, TKey>
Eine Funktion zum Extrahieren eines Schlüssels aus einem Element.
comparer
Typ: System.Collections.Generic.IComparer<TKey>
Ein IComparer<T> zum Vergleichen von Schlüsseln.

Rückgabewert

Typ: System.Linq.IOrderedEnumerable<TSource>
Ein IOrderedEnumerable<TElement>, dessen Elemente in absteigender Reihenfolge nach einem Schlüssel sortiert werden.

Hinweis zur Verwendung

In Visual Basic und C# können Sie diese Methode als Instanzenmethode für ein beliebiges Objekt vom Typ IEnumerable<TSource> aufrufen. Bei Verwendung der Syntax für Instanzenmethoden lassen Sie den ersten Parameter aus. Weitere Informationen finden Sie unter Erweiterungsmethoden (Visual Basic) und Erweiterungsmethoden (C#-Programmierhandbuch).

AusnahmeBedingung
ArgumentNullException

source oder keySelector ist null.

Diese Methode wird mit verzögerter Ausführung implementiert. Der Wert der sofortigen Rückgabe ist ein Objekt, in dem alle zum Ausführen der Aktion erforderlichen Informationen gespeichert werden. Die von dieser Methode dargestellte Abfrage wird erst ausgeführt, wenn das Objekt entweder durch den direkten Aufruf der zugehörigen GetEnumerator-Methode oder mithilfe von foreach in Visual C# oder For Each in Visual Basic aufgelistet wird.

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

Es sind zwei Methoden definiert, um den Typ IOrderedEnumerable<TElement> zu erweitern, der der Rückgabetyp dieser Methode ist. Diese zwei Methoden, nämlich ThenBy und ThenByDescending, ermöglichen es Ihnen, zusätzliche Sortierkriterien anzugeben, um eine Sequenz zu sortieren. ThenBy und ThenByDescending geben auch einen IOrderedEnumerable<TElement> zurück, das heißt, dass eine beliebige Anzahl von aufeinander folgenden Aufrufen von ThenBy oder ThenByDescending ausgeführt werden kann.

HinweisHinweis

Weil IOrderedEnumerable<TElement> von IEnumerable<T> erbt, können Sie OrderBy oder OrderByDescending für die Ergebnisse eines Aufrufs von OrderBy, OrderByDescending, ThenBy oder ThenByDescending aufrufen. Hierdurch erfolgt eine neue primäre Sortierung, die die zuvor festgelegte Sortierung ignoriert.

Wenn comparernull ist, werden Schlüssel mithilfe des Standardvergleichs Default verglichen.

Diese Methode führt eine stabile Sortierung aus, d. h., bei zwei Elementen mit gleichem Schlüssel wird die Reihenfolge der Elemente beibehalten. Im Gegensatz dazu wird bei einer instabilen Sortierung die Reihenfolge von Elementen, die über den gleichen Schlüssel verfügen, nicht beibehalten.

Im folgenden Codebeispiel wird veranschaulicht, wie Sie mit OrderByDescending<TSource, TKey>(IEnumerable<TSource>, Func<TSource, TKey>, IComparer<TKey>) und unter Verwendung einer Transformationsfunktion sowie eines benutzerdefinierten Vergleichs die Elemente einer Sequenz 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 };

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



.NET Framework

Unterstützt in: 4.5.2, 4.5.1, 4.5, 4, 3.5

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Portable Klassenbibliothek

Unterstützt in: Portable Klassenbibliothek

.NET für Windows Store-Apps

Unterstützt in: Windows 8

.NET für Windows Phone-Apps

Unterstützt in: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2015 Microsoft