共用方式為


Enumerable.ThenByDescending 方法

定義

依遞減順序,執行序列中項目的後續排序作業。

多載

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

依據索引鍵,按遞減順序執行序列中項目的後續排序作業。

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

使用指定的比較子,依遞減順序執行序列中項目的後續排序作業。

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

來源:
OrderBy.cs
來源:
OrderBy.cs
來源:
OrderBy.cs

依據索引鍵,按遞減順序執行序列中項目的後續排序作業。

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)

類型參數

TSource

source 項目的類型。

TKey

keySelector 所傳回之索引鍵的型別。

參數

source
IOrderedEnumerable<TSource>

包含要排序之項目的 IOrderedEnumerable<TElement>

keySelector
Func<TSource,TKey>

用來從各個項目擷取索引鍵的函式。

傳回

依據索引鍵按遞減順序排序其項目的 IOrderedEnumerable<TElement>

例外狀況

sourcekeySelectornull

備註

此方法是使用延後執行來實作。 立即傳回值是物件,可儲存執行動作所需的所有資訊。 除非直接在 GetEnumerator C# 或 Visual Basic 中使用 foreach 來列舉對象,否則 For Each 不會執行這個方法所表示的查詢。

若要依元素本身的值排序序列,請在 C# 或 Function(x) x Visual Basic) 中指定識別函x => x式 (keySelector

ThenByThenByDescending 會定義為擴充型 IOrderedEnumerable<TElement>別 ,這也是這些方法的傳回型別。 此設計可讓您套用任意數目 ThenBy 的 或 ThenByDescending 方法,以指定多個排序準則。

注意

因為 IOrderedEnumerable<TElement> 繼承自 IEnumerable<T>,所以您可以在呼叫 、 OrderByDescendingThenBy 或 的結果上呼叫 OrderByDescendingOrderByOrderBy或 。ThenByDescending 這麼做會引進新的主要順序,以忽略先前建立的排序。

這個排序方法會使用預設比較子 Default來比較索引鍵。

這個方法會執行穩定的排序;也就是說,如果兩個專案的索引鍵相等,則會保留元素的順序。 相反地,不穩定的排序不會保留具有相同索引鍵的項目順序。

在 C# 查詢表示式語法中 orderby [first criterion], [second criterion] descending ,子句會轉譯為 的 ThenByDescending調用。

在 Visual Basic 查詢表達式語法中 Order By [first criterion], [second criterion] Descending ,子句會轉譯為的 ThenByDescending調用。

另請參閱

適用於

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

來源:
OrderBy.cs
來源:
OrderBy.cs
來源:
OrderBy.cs

使用指定的比較子,依遞減順序執行序列中項目的後續排序作業。

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)

類型參數

TSource

source 項目的類型。

TKey

keySelector 所傳回之索引鍵的型別。

參數

source
IOrderedEnumerable<TSource>

包含要排序之項目的 IOrderedEnumerable<TElement>

keySelector
Func<TSource,TKey>

用來從各個項目擷取索引鍵的函式。

comparer
IComparer<TKey>

用來比較金鑰的 IComparer<T>

傳回

依據索引鍵按遞減順序排序其項目的 IOrderedEnumerable<TElement>

例外狀況

sourcekeySelectornull

範例

下列程式代碼範例示範如何使用 ThenByDescending<TSource,TKey>(IOrderedEnumerable<TSource>, Func<TSource,TKey>, IComparer<TKey>) 自定義比較子,以遞減順序執行序列中的元素次要順序。

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

備註

此方法是使用延後執行來實作。 立即傳回值是物件,可儲存執行動作所需的所有資訊。 除非直接在 GetEnumerator C# 或 Visual Basic 中使用 foreach 來列舉對象,否則 For Each 不會執行這個方法所表示的查詢。

若要依元素本身的值排序序列,請在 C# 或 Function(x) x Visual Basic) 中指定識別函x => x式 (keySelector

ThenByThenByDescending 會定義為擴充型 IOrderedEnumerable<TElement>別 ,這也是這些方法的傳回型別。 此設計可讓您套用任意數目 ThenBy 的 或 ThenByDescending 方法,以指定多個排序準則。

注意

因為 IOrderedEnumerable<TElement> 繼承自 IEnumerable<T>,所以您可以在呼叫 、 OrderByDescendingThenBy 或 的結果上呼叫 OrderByDescendingOrderByOrderBy或 。ThenByDescending 這麼做會引進新的主要順序,以忽略先前建立的排序。

如果 comparernull,則會使用預設比較子 Default 來比較索引鍵。

這個方法會執行穩定的排序;也就是說,如果兩個專案的索引鍵相等,則會保留元素的順序。 相反地,不穩定的排序不會保留具有相同索引鍵的項目順序。

適用於