Queryable.ThenByDescending Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Executa uma ordenação subsequente dos elementos em uma sequência em ordem decrescente.
Sobrecargas
| Nome | Description |
|---|---|
| ThenByDescending<TSource,TKey>(IOrderedQueryable<TSource>, Expression<Func<TSource,TKey>>) |
Executa uma ordenação subsequente dos elementos em uma sequência em ordem decrescente, de acordo com uma chave. |
| ThenByDescending<TSource,TKey>(IOrderedQueryable<TSource>, Expression<Func<TSource,TKey>>, IComparer<TKey>) |
Executa uma ordenação subsequente dos elementos em uma sequência em ordem decrescente usando um comparador especificado. |
ThenByDescending<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 decrescente, de acordo com uma chave.
public:
generic <typename TSource, typename TKey>
[System::Runtime::CompilerServices::Extension]
static System::Linq::IOrderedQueryable<TSource> ^ ThenByDescending(System::Linq::IOrderedQueryable<TSource> ^ source, System::Linq::Expressions::Expression<Func<TSource, TKey> ^> ^ keySelector);
public static System.Linq.IOrderedQueryable<TSource> ThenByDescending<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> ThenByDescending<TSource,TKey>(this System.Linq.IOrderedQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector);
static member ThenByDescending : 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 ThenByDescending : System.Linq.IOrderedQueryable<'Source> * System.Linq.Expressions.Expression<Func<'Source, 'Key>> -> System.Linq.IOrderedQueryable<'Source>
<Extension()>
Public Function ThenByDescending(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 em ordem decrescente de acordo com uma chave.
- Atributos
Exceções
source ou keySelector é 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 ThenByDescending<TSource,TKey>(IOrderedQueryable<TSource>, Expression<Func<TSource,TKey>>) método gera um MethodCallExpression que representa chamar ThenByDescending<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 ThenByDescending<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 em ordem decrescente, com 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
ThenByDescending<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 decrescente usando um comparador especificado.
public:
generic <typename TSource, typename TKey>
[System::Runtime::CompilerServices::Extension]
static System::Linq::IOrderedQueryable<TSource> ^ ThenByDescending(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> ThenByDescending<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> ThenByDescending<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> ThenByDescending<TSource,TKey>(this System.Linq.IOrderedQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Collections.Generic.IComparer<TKey>? comparer);
static member ThenByDescending : 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 ThenByDescending : System.Linq.IOrderedQueryable<'Source> * System.Linq.Expressions.Expression<Func<'Source, 'Key>> * System.Collections.Generic.IComparer<'Key> -> System.Linq.IOrderedQueryable<'Source>
<Extension()>
Public Function ThenByDescending(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 keySelector função.
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
Uma coleção cujos elementos são classificados em ordem decrescente de acordo com uma chave.
- Atributos
Exceções
source ou ou keySelectorcomparer é null.
Exemplos
O exemplo de código a seguir demonstra como usar ThenByDescending<TSource,TKey>(IOrderedQueryable<TSource>, Expression<Func<TSource,TKey>>, IComparer<TKey>) para executar uma ordenação secundária dos elementos em uma sequência em ordem decrescente usando um comparador personalizado.
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.AsQueryable()
.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
*/
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 ascending by their length and
' then descending by using a custom case insensitive comparer.
Dim query = fruits.AsQueryable() _
.OrderBy(Function(fruit) fruit.Length) _
.ThenByDescending(Function(fruit) fruit, New CaseInsensitiveComparer())
Dim output As New System.Text.StringBuilder
For Each fruit As String In query
output.AppendLine(fruit)
Next
' Display the results.
MsgBox(output.ToString())
End Sub
' This code produces the following output:
' apPLe
' apple
' APple
' apPLE
' orange
' ORANGE
' baNanA
' BAnana
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 em ordem decrescente, com 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.