Бөлісу құралы:


Возвращает среднее значение из числовой последовательности

Оператор Average вычисляет среднее значение последовательности числовых значений.

Замечание

Преобразование LINQ to SQL Average целочисленных значений вычисляется как целое число, а не как двойное.

Пример 1

В следующем примере возвращается среднее значение Freight в таблице Orders.

Результаты из примера базы данных 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)

Пример 2

В следующем примере возвращается среднее значение цены за единицу всех Products в таблице Products.

Результаты из примера базы данных 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)

Пример 3

В следующем примере оператор Average используется для поиска тех Products, чья цена за единицу выше средней цены за единицу в категории, к которой они относятся. Затем в примере отображаются результаты в группах.

Обратите внимание, что в этом примере требуется использовать var ключевое слово в C#, так как тип возвращаемого значения является анонимным.

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

При выполнении этого запроса в примере базы данных Northwind результаты должны выглядеть следующим образом:

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

См. также