Enumerable.ThenBy 方法

定義

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

多載

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

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

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

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

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

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

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

依據索引鍵排序其項目的 IOrderedEnumerable<TElement>

例外狀況

sourcekeySelectornull

範例

下列程式碼範例示範如何使用 ThenBy<TSource,TKey>(IOrderedEnumerable<TSource>, Func<TSource,TKey>) 來執行序列中專案的次要順序。

string[] fruits = { "grape", "passionfruit", "banana", "mango",
                      "orange", "raspberry", "apple", "blueberry" };

// Sort the strings first by their length and then
//alphabetically by passing the identity selector function.
IEnumerable<string> query =
    fruits.OrderBy(fruit => fruit.Length).ThenBy(fruit => fruit);

foreach (string fruit in query)
{
    Console.WriteLine(fruit);
}

/*
    This code produces the following output:

    apple
    grape
    mango
    banana
    orange
    blueberry
    raspberry
    passionfruit
*/
' Create an array of strings.
Dim fruits() As String =
{"grape", "passionfruit", "banana", "mango",
 "orange", "raspberry", "apple", "blueberry"}

' Sort the strings first by their length and then 
' alphabetically by passing the identity function.
Dim query As IEnumerable(Of String) =
fruits _
.OrderBy(Function(fruit) fruit.Length) _
.ThenBy(Function(fruit) fruit)

' 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())

' This code produces the following output:
'
' apple
' grape
' mango
' banana
' orange
' blueberry
' raspberry
' passionfruit

備註

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

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

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

注意

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

此方法會使用預設比較子 Default 來比較索引鍵。

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

在查詢運算式語法中, orderby [first criterion], [second criterion] (Visual C#) 或 Order By [first criterion], [second criterion] (Visual Basic) 子句會轉譯為 的 ThenBy 調用。

另請參閱

適用於

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

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

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

依據索引鍵排序其項目的 IOrderedEnumerable<TElement>

例外狀況

sourcekeySelectornull

備註

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

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

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

注意

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

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

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

適用於