Condividi tramite


Enumerable.ThenByDescending Metodo

Definizione

Esegue un successivo ordinamento in senso decrescente degli elementi di una sequenza.

Overload

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

Esegue un successivo ordinamento in senso decrescente in base a una chiave degli elementi di una sequenza.

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

Esegue un ordinamento secondario in senso decrescente degli elementi di una sequenza utilizzando un operatore di confronto specificato.

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

Origine:
OrderBy.cs
Origine:
OrderBy.cs
Origine:
OrderBy.cs

Esegue un successivo ordinamento in senso decrescente in base a una chiave degli elementi di una sequenza.

public:
generic <typename TSource, typename TKey>
[System::Runtime::CompilerServices::Extension]
 static System::Linq::IOrderedEnumerable<TSource> ^ ThenByDescending(System::Linq::IOrderedEnumerable<TSource> ^ source, Func<TSource, TKey> ^ keySelector);
public static System.Linq.IOrderedEnumerable<TSource> ThenByDescending<TSource,TKey> (this System.Linq.IOrderedEnumerable<TSource> source, Func<TSource,TKey> keySelector);
static member ThenByDescending : System.Linq.IOrderedEnumerable<'Source> * Func<'Source, 'Key> -> System.Linq.IOrderedEnumerable<'Source>
<Extension()>
Public Function ThenByDescending(Of TSource, TKey) (source As IOrderedEnumerable(Of TSource), keySelector As Func(Of TSource, TKey)) As IOrderedEnumerable(Of TSource)

Parametri di tipo

TSource

Tipo degli elementi di source.

TKey

Tipo della chiave restituita dall'oggetto keySelector.

Parametri

source
IOrderedEnumerable<TSource>

Oggetto IOrderedEnumerable<TElement> che contiene gli elementi da ordinare.

keySelector
Func<TSource,TKey>

Funzione per estrarre una chiave da ogni elemento.

Restituisce

Oggetto IOrderedEnumerable<TElement> i cui elementi vengono ordinati in senso decrescente in base a una chiave.

Eccezioni

source o keySelector è null.

Commenti

Questo metodo viene implementato usando l'esecuzione posticipata. Il valore restituito immediato è un oggetto che archivia tutte le informazioni necessarie per eseguire l'azione. La query rappresentata da questo metodo non viene eseguita finché l'oggetto non viene enumerato chiamando il GetEnumerator relativo metodo direttamente o usando foreach in C# o For Each in Visual Basic.

Per ordinare una sequenza in base ai valori degli elementi stessi, specificare la funzione identity (x => x in C# o Function(x) x in Visual Basic) per keySelector.

ThenBy e ThenByDescending sono definiti per estendere il tipo IOrderedEnumerable<TElement>, che è anche il tipo restituito di questi metodi. Questa progettazione consente di specificare più criteri di ordinamento applicando qualsiasi numero di ThenBy metodi o ThenByDescending .

Nota

Poiché IOrderedEnumerable<TElement> eredita da IEnumerable<T>, è possibile chiamare OrderBy o OrderByDescending sui risultati di una chiamata a OrderBy, OrderByDescendingThenBy o ThenByDescending. In questo modo viene introdotto un nuovo ordinamento primario che ignora l'ordinamento stabilito in precedenza.

Questo metodo di ordinamento confronta le chiavi usando il comparer Defaultpredefinito .

Questo metodo esegue un ordinamento stabile; ovvero, se le chiavi di due elementi sono uguali, l'ordine degli elementi viene mantenuto. Al contrario, un ordinamento instabile non mantiene l'ordine degli elementi che hanno la stessa chiave.

Nella sintassi orderby [first criterion], [second criterion] descending dell'espressione di query C# una clausola viene tradotta in una chiamata di ThenByDescending.

Nella sintassi dell'espressione di query di Visual Basic, una Order By [first criterion], [second criterion] Descending clausola si traduce in una chiamata di ThenByDescending.

Vedi anche

Si applica a

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

Origine:
OrderBy.cs
Origine:
OrderBy.cs
Origine:
OrderBy.cs

Esegue un ordinamento secondario in senso decrescente degli elementi di una sequenza utilizzando un operatore di confronto specificato.

public:
generic <typename TSource, typename TKey>
[System::Runtime::CompilerServices::Extension]
 static System::Linq::IOrderedEnumerable<TSource> ^ ThenByDescending(System::Linq::IOrderedEnumerable<TSource> ^ source, Func<TSource, TKey> ^ keySelector, System::Collections::Generic::IComparer<TKey> ^ comparer);
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);
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);
static member ThenByDescending : System.Linq.IOrderedEnumerable<'Source> * Func<'Source, 'Key> * System.Collections.Generic.IComparer<'Key> -> System.Linq.IOrderedEnumerable<'Source>
<Extension()>
Public Function ThenByDescending(Of TSource, TKey) (source As IOrderedEnumerable(Of TSource), keySelector As Func(Of TSource, TKey), comparer As IComparer(Of TKey)) As IOrderedEnumerable(Of TSource)

Parametri di tipo

TSource

Tipo degli elementi di source.

TKey

Tipo della chiave restituita dall'oggetto keySelector.

Parametri

source
IOrderedEnumerable<TSource>

Oggetto IOrderedEnumerable<TElement> che contiene gli elementi da ordinare.

keySelector
Func<TSource,TKey>

Funzione per estrarre una chiave da ogni elemento.

comparer
IComparer<TKey>

Oggetto IComparer<T> per confrontare le chiavi.

Restituisce

Oggetto IOrderedEnumerable<TElement> i cui elementi vengono ordinati in senso decrescente in base a una chiave.

Eccezioni

source o keySelector è null.

Esempio

Nell'esempio di codice seguente viene illustrato come usare ThenByDescending<TSource,TKey>(IOrderedEnumerable<TSource>, Func<TSource,TKey>, IComparer<TKey>) per eseguire un ordinamento secondario degli elementi in una sequenza in ordine decrescente usando un comparer personalizzato.

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
*/
' This class provides a custom implementation of the Compare() method.
Class CaseInsensitiveComparer
    Implements IComparer(Of String)

    Function Compare(ByVal x As String, ByVal y As String) As Integer _
    Implements IComparer(Of String).Compare

        ' Compare values and ignore case.
        Return String.Compare(x, y, True)
    End Function
End Class

Sub ThenByDescendingEx1()
    Dim fruits() As String =
    {"apPLe", "baNanA", "apple", "APple", "orange", "BAnana", "ORANGE", "apPLE"}

    ' Sort the strings first by their length and then
    ' by using a custom "case insensitive" comparer.
    Dim query As IEnumerable(Of String) =
    fruits _
    .OrderBy(Function(fruit) fruit.Length) _
    .ThenByDescending(Function(fruit) fruit, New CaseInsensitiveComparer())

    ' Display the results.
    Dim output As New System.Text.StringBuilder
    For Each fruit As String In query
        output.AppendLine(fruit)
    Next
    Console.WriteLine(output.ToString())
End Sub

' This code produces the following output:

' apPLe
' apple
' APple
' apPLE
' orange
' ORANGE
' baNanA
' BAnana

Commenti

Questo metodo viene implementato usando l'esecuzione posticipata. Il valore restituito immediato è un oggetto che archivia tutte le informazioni necessarie per eseguire l'azione. La query rappresentata da questo metodo non viene eseguita finché l'oggetto non viene enumerato chiamando il GetEnumerator relativo metodo direttamente o usando foreach in C# o For Each in Visual Basic.

Per ordinare una sequenza in base ai valori degli elementi stessi, specificare la funzione identity (x => x in C# o Function(x) x in Visual Basic) per keySelector.

ThenBy e ThenByDescending sono definiti per estendere il tipo IOrderedEnumerable<TElement>, che è anche il tipo restituito di questi metodi. Questa progettazione consente di specificare più criteri di ordinamento applicando qualsiasi numero di ThenBy metodi o ThenByDescending .

Nota

Poiché IOrderedEnumerable<TElement> eredita da IEnumerable<T>, è possibile chiamare OrderBy o OrderByDescending sui risultati di una chiamata a OrderBy, OrderByDescendingThenBy o ThenByDescending. In questo modo viene introdotto un nuovo ordinamento primario che ignora l'ordinamento stabilito in precedenza.

Se comparer è null, il comparer Default predefinito viene usato per confrontare le chiavi.

Questo metodo esegue un ordinamento stabile; ovvero, se le chiavi di due elementi sono uguali, l'ordine degli elementi viene mantenuto. Al contrario, un ordinamento instabile non mantiene l'ordine degli elementi che hanno la stessa chiave.

Si applica a