Resumo : neste tutorial você aprenderá como usar o MaxBy()
método LINQ para retornar o elemento com o valor máximo em uma sequência.
Introdução ao método LINQ MaxBy()
O MaxBy()
método retorna o valor máximo em uma sequência baseada em uma função seletora de chave:
TSource? MaxBy<TSource,TKey> (
this Enumerable<TSource> source,
Func<TSource,TKey> keySelector
);
Linguagem de código: C# ( cs )
Nesta sintaxe;
TSource
é o tipo de elemento na sequência de origem.TKey
é um tipo de chave usada para comparar elementos.source
é uma sequência de entrada de elementos comIEnumerable<TSource>
tipo.keySelector
é uma função que extrai a chave de cada elemento.
O LINQ MaxBy()
retorna o valor com a chave máxima na sequência.
Observe que o Max()
método retorna o valor máximo dos elementos por uma chave enquanto o MaxBy()
método retorna o elemento com o valor máximo pela chave.
Exemplos de métodos LINQ MaxBy()
Suponha que você tenha uma Product
classe que possui três propriedades Name
, Cost
e Price
:
public class Product
{
public string Name
{
get; set;
}
public decimal Price
{
get; set;
}
public decimal Cost
{
get; set;
}
public Product(string name, decimal cost, decimal price)
{
Name = name;
Cost = cost;
Price = price;
}
public override string ToString() => $"{Name}, Cost:{Cost}, Price:{Price}";
}
Linguagem de código: C# ( cs )
O programa a seguir usa o MaxBy()
método para encontrar o produto que tem o preço mais alto:
using static System.Console;
var products = new List<Product>() {
new Product(name:"A",cost:100,price:160),
new Product(name:"B",cost:95,price:130),
new Product(name:"C",cost:140,price:150),
};
var product = products.MaxBy(p => p.Price);
WriteLine(product);
Linguagem de código: C# ( cs )
Saída:
A, Cost:100, Price:160
Linguagem de código: C# ( cs )
Ele retorna o produto A com um preço de 160.
Para encontrar o produto com o custo mais alto, você altera a função do seletor de chave para selecionar a Cost
propriedade em vez da propriedade Preço da seguinte forma:
using static System.Console;
var products = new List<Product>() {
new Product(name:"A",cost:100,price:160),
new Product(name:"B",cost:95,price:130),
new Product(name:"C",cost:140,price:150),
};
var product = products.MaxBy(p => p.Cost);
WriteLine(product);
Linguagem de código: C# ( cs )
Saída:
C, Cost:140, Price:150
Linguagem de código: C# ( cs )
Resumo
- Use o método LINQ
MaxBy()
para retornar o elemento com o valor máximo em uma sequência.