如何:返回数值序列的平均值 (LINQ to SQL)

Average 运算符用于计算数值序列的平均值。

注意注意

使用经 LINQ to SQL 转换后的 Average 计算整数值时,所得结果的数据类型为 integer,而非 double。

示例

下面的示例返回 Orders 表中 Freight 值的平均值。

从 Northwind 示例数据库中得到的结果将为 78.2442。

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

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

Console.WriteLine(averageFreight);

下面的示例返回 Products 表中所有 Products 的平均单价。

从 Northwind 示例数据库中得到的结果将为 28.8663。

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

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

Console.WriteLine(averageUnitPrice);

下面的示例使用 Average 运算符查找其单价高于其所属类别的平均单价的那些 Products。 此示例随后会按组显示结果。

请注意,此示例需要使用 C# 中的 var 关键字,这是因为返回类型为匿名类型。

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
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);
    }
}

如果您对 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

请参见

其他资源

聚合查询 (LINQ to SQL)