Retornar o valor médio de uma sequência numérica

O operador de Average calcula a média de uma sequência de valores numéricos.

Observação

A tradução de LINQ to SQL de Average valores inteiros é calculada apenas como um número inteiro, não como um duplo.

Exemplo 1

O exemplo a seguir retorna média dos valores de Freight na tabela de Orders .

Os resultados de base de dados de exemplo Northwind é 78.2442.

System.Nullable<Decimal> averageFreight =
    (from ord in db.Orders
    select ord.Freight)
    .Average();

Console.WriteLine(averageFreight);
Dim averageFreight = Aggregate ord In db.Orders _
                     Into Average(ord.Freight)

Console.WriteLine(averageFreight)

Exemplo 2

O exemplo a seguir retorna a média de preço unitário de qualquer Products na tabela de Products .

Os resultados de base de dados de exemplo Northwind é 28.8663.

System.Nullable<Decimal> averageUnitPrice =
    (from prod in db.Products
    select prod.UnitPrice)
    .Average();

Console.WriteLine(averageUnitPrice);
Dim averageUnitPrice = Aggregate prod In db.Products _
                       Into Average(prod.UnitPrice)

Console.WriteLine(averageUnitPrice)

Exemplo 3

O exemplo a seguir usa o operador de Average para localizar apenas Products cujo preço unitário é maior do que o preço unitário médio da categoria que pertence. O exemplo exibe os resultados em grupos.

Observe que esse exemplo requer o uso da palavra-chave de var em C#, porque o tipo de retorno é anônimo.

var priceQuery =
    from prod in db.Products
    group prod by prod.CategoryID into grouping
    select new
    {
        grouping.Key,
        ExpensiveProducts =
            from prod2 in grouping
            where prod2.UnitPrice > grouping.Average(prod3 =>
                prod3.UnitPrice)
        select prod2
    };

foreach (var grp in priceQuery)
{
    Console.WriteLine(grp.Key);
    foreach (var listing in grp.ExpensiveProducts)
    {
        Console.WriteLine(listing.ProductName);
    }
}
Dim priceQuery = From prod In db.Products() _
                 Group prod By prod.CategoryID Into grouping = Group _
                 Select CategoryID, _
                 ExpensiveProducts = _
                     (From prod2 In grouping _
                      Where prod2.UnitPrice > _
                     grouping.Average(Function(prod3) _
                     prod3.UnitPrice) _
                      Select prod2)

For Each grp In priceQuery
    Console.WriteLine(grp.CategoryID)
    For Each listing In grp.ExpensiveProducts
        Console.WriteLine(listing.ProductName)
    Next
Next

Se você executa essa consulta na base de dados de exemplo Northwind, os resultados devem se parecer com o seguinte:

1

Côte de Blaye

Ipoh Coffee

2

Grandma's Boysenberry Spread

Northwoods Cranberry Sauce

Sirop d'érable

Vegie-spread

3

Sir Rodney's Marmalade

Gumbär Gummibärchen

Schoggi Schokolade

Tarte au sucre

4

Queso Manchego La Pastora

Mascarpone Fabioli

Raclette Courdavault

Camembert Pierrot

Gudbrandsdalsost

Mozzarella di Giovanni

5

Gustaf's Knäckebröd

Gnocchi di nonna Alice

Wimmers gute Semmelknödel

6

Mishi Kobe Niku

Thüringer Rostbratwurst

7

Rössle Sauerkraut

Manjimup Dried Apples

8

Ikura

Carnarvon Tigers

Nord-Ost Matjeshering

Gravad lax

Confira também