LINQ to SQL语句(3)之Count/Sum/Min/Max/Avg

适用场景:统计数据吧,好比统计一些数据的个数,求和,最小值,最大值,平均数。数据库

Count

说明:返回集合中的元素个数,返回INT类型;不延迟。生成SQL语句为:SELECT COUNT(*) FROM函数

1.简单形式:spa

获得数据库中客户的数量:code

var q = db.Customers.Count();

2.带条件形式:blog

获得数据库中未断货产品的数量:产品

var q = db.Products.Count(p => !p.Discontinued);

LongCountit

说明:返回集合中的元素个数,返回LONG类型;不延迟。对于元素个数较多的集合可视状况能够选用LongCount来统计元素个数,它返回long类型,比较精确。生成SQL语句为:SELECT COUNT_BIG(*) FROMclass

var q = db.Customers.LongCount();

Sum

说明:返回集合中数值类型元素之和,集合应为INT类型集合;不延迟。生成SQL语句为:SELECT SUM(…) FROMselect

1.简单形式:遍历

获得全部订单的总运费:

var q = db.Orders.Select(o => o.Freight).Sum();

2.映射形式:

获得全部产品的定货总数:

var q = db.Products.Sum(p => p.UnitsOnOrder);

Min

说明:返回集合中元素的最小值;不延迟。生成SQL语句为:SELECT MIN(…) FROM

1.简单形式:

查找任意产品的最低单价:

var q = db.Products.Select(p => p.UnitPrice).Min();

2.映射形式:

查找任意订单的最低运费:

var q = db.Orders.Min(o => o.Freight);

3.元素:

查找每一个类别中单价最低的产品:

var categories =
    from p in db.Products
    group p by p.CategoryID into g
    select new {
        CategoryID = g.Key,
        CheapestProducts =
            from p2 in g
            where p2.UnitPrice == g.Min(p3 => p3.UnitPrice)
            select p2
    };

Max

说明:返回集合中元素的最大值;不延迟。生成SQL语句为:SELECT MAX(…) FROM

1.简单形式:

查找任意雇员的最近雇用日期:

var q = db.Employees.Select(e => e.HireDate).Max();

2.映射形式:

查找任意产品的最大库存量:

var q = db.Products.Max(p => p.UnitsInStock);

3.元素:

查找每一个类别中单价最高的产品:

var categories =
    from p in db.Products
    group p by p.CategoryID into g
    select new {
        g.Key,
        MostExpensiveProducts =
            from p2 in g
            where p2.UnitPrice == g.Max(p3 => p3.UnitPrice)
            select p2
    };

Average

说明:返回集合中的数值类型元素的平均值。集合应为数字类型集合,其返回值类型为double;不延迟。生成SQL语句为:SELECT AVG(…) FROM

1.简单形式:

获得全部订单的平均运费:

var q = db.Orders.Select(o => o.Freight).Average();

2.映射形式:

获得全部产品的平均单价:

var q = db.Products.Average(p => p.UnitPrice);

3.元素:

查找每一个类别中单价高于该类别平均单价的产品:

var categories =
    from p in db.Products
    group p by p.CategoryID into g
    select new {
        g.Key, 
        ExpensiveProducts =
            from p2 in g
            where p2.UnitPrice > g.Average(p3 => p3.UnitPrice)
            select p2
    };

Aggregate

说明:根据输入的表达式获取聚合值;不延迟。便是说:用一个种子值与当前元素经过指定的函数来进行对比来遍历集合中的元素,符合条件的元素保留下来。若是没有指定种子值的话,种子值默认为集合的第一个元素。