Resumo : neste tutorial, você aprenderá como usar o Sum()
método LINQ para calcular a soma de uma sequência de valores numéricos.
Introdução ao método LINQ Sum()
O Sum()
é um método de extensão que calcula a soma de uma sequência de números. Os tipos de números podem ser Int32
, Int64
, Decimal
e Double
:
TSource Sum (
this IEnumerable<TSource> source
);
Linguagem de código: C# ( cs )
Nesta sintaxe:
TSource
é o tipo de elementos na sequência de origem.source
é a sequência de entrada. Seu tipo éIEnumerable<T>
.
Além de aceitar uma sequência de números, o Sum()
método aceita uma sequência de números anuláveis como Nullable<Int32>
,,, Nullable<Int64>
… Porém, o Sum()
método ignora null
elementos no cálculo. Se a sequência estiver vazia, o Sum()
método retornará zero.
O Sum()
método possui uma sobrecarga que aceita um segundo argumento como função seletora que especifica quais valores selecionar para somar:
static TSource Sum<TSource>(
this IEnumerable<TSource> source,
Func<TSource, decimal> selector
)
Linguagem de código: C# ( cs )
Nesta sintaxe, a selector
função recebe dois argumentos. O primeiro argumento é a source
sequência e o segundo é a selector
função.
O selector
pega um elemento da source
sequência e retorna o valor para calcular a soma. O Sum()
método retorna a soma dos valores selecionados.
Exemplos de soma() de LINQ
Vejamos alguns exemplos de uso do Sum()
método.
1) Usando o método Sum() para calcular a soma de inteiros
O programa a seguir demonstra como usar o Sum()
método para calcular o total de inteiros:
using static System.Console;
int[] numbers = { 1, 2, 3, 4, 5 };
var total = numbers.Sum();
WriteLine(total);
Linguagem de código: C# ( cs )
Saída:
15
Linguagem de código: C# ( cs )
O Sum()
também funciona com uma sequência de números inteiros anuláveis. Por exemplo:
using static System.Console;
int?[] numbers = { 1, 2, 3, 4, 5, null };
var total = numbers.Sum();
WriteLine(total);
Linguagem de código: C# ( cs )
Saída:
10
Linguagem de código: C# ( cs )
Neste exemplo, o
método ignora o elemento nulo. Como resultado, ele retorna 10.Sum()
2) Usando o método Sum() para calcular a soma de uma sequência de objetos
O programa a seguir demonstra como usar o Sum()
método para calcular o valor total de um pedido:
using static System.Console;
class Item
{
public string? Name;
public decimal? Amount;
}
class Order
{
private List<Item> items = new();
public void Add(Item item)
{
items.Add(item);
}
public List<Item> Items { get { return items; }}
}
class Program
{
public static void Main(string[] args)
{
var order = new Order();
order.Add(new Item { Name = "A", Amount = 9.99M });
order.Add(new Item { Name = "B", Amount = 14.99M });
order.Add(new Item { Name = "C", Amount = 4.99M });
var total = order.Items.Sum(item => item.Amount);
WriteLine(total);
}
}
Linguagem de código: C# ( cs )
Primeiro, defina a Item
classe que possui dois campos públicos: Name
e Amount
, que representam o nome e o preço de um item respectivamente.
A seguir, defina a Order
classe que possui o campo privado chamado items
, que é uma lista de Item
objetos. A classe Order possui o Add()
método que adiciona um Item
objeto à items
lista. Expõe o items
como propriedade pública Items
.
Em seguida, no Main()
método, crie um novo objeto de pedido e adicione três itens aos pedidos usando o Add()
método.
Depois disso, utilize o Sum()
método para calcular o valor total do pedido. Chamamos o Sum()
método na Items
propriedade do objeto order, que retorna uma lista de objetos Item. O Sum()
método utiliza uma expressão lambda que especifica como selecionar valores para calcular a soma. Neste caso, a expressão lambda item => item.Amount
seleciona o Amount
campo de cada Item
objeto da lista.
Por fim, escreva o valor total no console.
Resumo
- Use o método LINQ
Sum()
para calcular a soma dos elementos de uma sequência.