Compartilhar via


Queryable.ThenBy Método

Definição

Executa uma ordenação subsequente dos elementos em uma sequência em ordem crescente.

Sobrecargas

Nome Description
ThenBy<TSource,TKey>(IOrderedQueryable<TSource>, Expression<Func<TSource,TKey>>, IComparer<TKey>)

Executa uma ordenação subsequente dos elementos em uma sequência em ordem crescente usando um comparador especificado.

ThenBy<TSource,TKey>(IOrderedQueryable<TSource>, Expression<Func<TSource,TKey>>)

Executa uma ordenação subsequente dos elementos em uma sequência em ordem crescente de acordo com uma chave.

ThenBy<TSource,TKey>(IOrderedQueryable<TSource>, Expression<Func<TSource,TKey>>, IComparer<TKey>)

Origem:
Queryable.cs
Origem:
Queryable.cs
Origem:
Queryable.cs
Origem:
Queryable.cs
Origem:
Queryable.cs

Executa uma ordenação subsequente dos elementos em uma sequência em ordem crescente usando um comparador especificado.

public:
generic <typename TSource, typename TKey>
[System::Runtime::CompilerServices::Extension]
 static System::Linq::IOrderedQueryable<TSource> ^ ThenBy(System::Linq::IOrderedQueryable<TSource> ^ source, System::Linq::Expressions::Expression<Func<TSource, TKey> ^> ^ keySelector, System::Collections::Generic::IComparer<TKey> ^ comparer);
public static System.Linq.IOrderedQueryable<TSource> ThenBy<TSource,TKey>(this System.Linq.IOrderedQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Collections.Generic.IComparer<TKey> comparer);
public static System.Linq.IOrderedQueryable<TSource> ThenBy<TSource,TKey>(this System.Linq.IOrderedQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Collections.Generic.IComparer<TKey>? comparer);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Enumerating collections as IQueryable can require creating new generic types or methods, which requires creating code at runtime. This may not work when AOT compiling.")]
public static System.Linq.IOrderedQueryable<TSource> ThenBy<TSource,TKey>(this System.Linq.IOrderedQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Collections.Generic.IComparer<TKey>? comparer);
static member ThenBy : System.Linq.IOrderedQueryable<'Source> * System.Linq.Expressions.Expression<Func<'Source, 'Key>> * System.Collections.Generic.IComparer<'Key> -> System.Linq.IOrderedQueryable<'Source>
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Enumerating collections as IQueryable can require creating new generic types or methods, which requires creating code at runtime. This may not work when AOT compiling.")>]
static member ThenBy : System.Linq.IOrderedQueryable<'Source> * System.Linq.Expressions.Expression<Func<'Source, 'Key>> * System.Collections.Generic.IComparer<'Key> -> System.Linq.IOrderedQueryable<'Source>
<Extension()>
Public Function ThenBy(Of TSource, TKey) (source As IOrderedQueryable(Of TSource), keySelector As Expression(Of Func(Of TSource, TKey)), comparer As IComparer(Of TKey)) As IOrderedQueryable(Of TSource)

Parâmetros de tipo

TSource

O tipo dos elementos de source.

TKey

O tipo da chave retornada pela função representada por keySelector.

Parâmetros

source
IOrderedQueryable<TSource>

Um IOrderedQueryable<T> que contém elementos para classificar.

keySelector
Expression<Func<TSource,TKey>>

Uma função para extrair uma chave de cada elemento.

comparer
IComparer<TKey>

Um IComparer<T> para comparar chaves.

Retornos

Um IOrderedQueryable<T> cujos elementos são classificados de acordo com uma chave.

Atributos

Exceções

source ou ou keySelectorcomparer é null.

Comentários

Esse método tem pelo menos um parâmetro de tipo Expression<TDelegate> cujo argumento de tipo é um dos Func<T,TResult> tipos. Para esses parâmetros, você pode passar uma expressão lambda e ela será compilada para um Expression<TDelegate>.

O ThenBy<TSource,TKey>(IOrderedQueryable<TSource>, Expression<Func<TSource,TKey>>, IComparer<TKey>) método gera um MethodCallExpression que representa chamar ThenBy<TSource,TKey>(IOrderedQueryable<TSource>, Expression<Func<TSource,TKey>>, IComparer<TKey>) a si mesmo como um método genérico construído. Em seguida, ele passa o MethodCallExpressionCreateQuery<TElement>(Expression) método do IQueryProvider representado pela Provider propriedade do source parâmetro. O resultado da chamada CreateQuery<TElement>(Expression) é convertido para digitar IOrderedQueryable<T> e retornado.

O comportamento da consulta que ocorre como resultado da execução de uma árvore de expressão que representa a chamada ThenBy<TSource,TKey>(IOrderedQueryable<TSource>, Expression<Func<TSource,TKey>>, IComparer<TKey>) depende da implementação do tipo do source parâmetro. O comportamento esperado é que ele executa um tipo secundário dos elementos de source base na chave obtida invocando keySelector em cada elemento de source. Todas as ordens de classificação estabelecidas anteriormente são preservadas. O comparer parâmetro é usado para comparar valores de chave.

Aplica-se a

ThenBy<TSource,TKey>(IOrderedQueryable<TSource>, Expression<Func<TSource,TKey>>)

Origem:
Queryable.cs
Origem:
Queryable.cs
Origem:
Queryable.cs
Origem:
Queryable.cs
Origem:
Queryable.cs

Executa uma ordenação subsequente dos elementos em uma sequência em ordem crescente de acordo com uma chave.

public:
generic <typename TSource, typename TKey>
[System::Runtime::CompilerServices::Extension]
 static System::Linq::IOrderedQueryable<TSource> ^ ThenBy(System::Linq::IOrderedQueryable<TSource> ^ source, System::Linq::Expressions::Expression<Func<TSource, TKey> ^> ^ keySelector);
public static System.Linq.IOrderedQueryable<TSource> ThenBy<TSource,TKey>(this System.Linq.IOrderedQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Enumerating collections as IQueryable can require creating new generic types or methods, which requires creating code at runtime. This may not work when AOT compiling.")]
public static System.Linq.IOrderedQueryable<TSource> ThenBy<TSource,TKey>(this System.Linq.IOrderedQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector);
static member ThenBy : System.Linq.IOrderedQueryable<'Source> * System.Linq.Expressions.Expression<Func<'Source, 'Key>> -> System.Linq.IOrderedQueryable<'Source>
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Enumerating collections as IQueryable can require creating new generic types or methods, which requires creating code at runtime. This may not work when AOT compiling.")>]
static member ThenBy : System.Linq.IOrderedQueryable<'Source> * System.Linq.Expressions.Expression<Func<'Source, 'Key>> -> System.Linq.IOrderedQueryable<'Source>
<Extension()>
Public Function ThenBy(Of TSource, TKey) (source As IOrderedQueryable(Of TSource), keySelector As Expression(Of Func(Of TSource, TKey))) As IOrderedQueryable(Of TSource)

Parâmetros de tipo

TSource

O tipo dos elementos de source.

TKey

O tipo da chave retornada pela função representada por keySelector.

Parâmetros

source
IOrderedQueryable<TSource>

Um IOrderedQueryable<T> que contém elementos para classificar.

keySelector
Expression<Func<TSource,TKey>>

Uma função para extrair uma chave de cada elemento.

Retornos

Um IOrderedQueryable<T> cujos elementos são classificados de acordo com uma chave.

Atributos

Exceções

source ou keySelector é null.

Exemplos

O exemplo de código a seguir demonstra como usar ThenBy<TSource,TKey>(IOrderedQueryable<TSource>, Expression<Func<TSource,TKey>>) para executar uma ordenação secundária dos elementos em uma sequência.

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

// Sort the strings first by their length and then
// alphabetically by passing the identity selector function.
IEnumerable<string> query =
    fruits.AsQueryable()
    .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
*/
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 selector function.
Dim query = fruits.AsQueryable() _
    .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
MsgBox(output.ToString())

'This code produces the following output:

'apple
'grape
'mango
'banana
'orange
'blueberry
'raspberry
'passionfruit

Comentários

Esse método tem pelo menos um parâmetro de tipo Expression<TDelegate> cujo argumento de tipo é um dos Func<T,TResult> tipos. Para esses parâmetros, você pode passar uma expressão lambda e ela será compilada para um Expression<TDelegate>.

O ThenBy<TSource,TKey>(IOrderedQueryable<TSource>, Expression<Func<TSource,TKey>>) método gera um MethodCallExpression que representa chamar ThenBy<TSource,TKey>(IOrderedQueryable<TSource>, Expression<Func<TSource,TKey>>) a si mesmo como um método genérico construído. Em seguida, ele passa o MethodCallExpressionCreateQuery<TElement>(Expression) método do IQueryProvider representado pela Provider propriedade do source parâmetro. O resultado da chamada CreateQuery<TElement>(Expression) é convertido para digitar IOrderedQueryable<T> e retornado.

O comportamento da consulta que ocorre como resultado da execução de uma árvore de expressão que representa a chamada ThenBy<TSource,TKey>(IOrderedQueryable<TSource>, Expression<Func<TSource,TKey>>) depende da implementação do tipo do source parâmetro. O comportamento esperado é que ele executa um tipo secundário dos elementos de source base na chave obtida invocando keySelector em cada elemento de source. Todas as ordens de classificação estabelecidas anteriormente são preservadas.

Aplica-se a