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

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

 

[1] Count/Sum 讲解

 

[2] Min 讲解

 

[3] Max 讲解

 

[4] Average 和 Aggregate 讲解

 

Count/Sum/Min/Max/Avg 操作符

 

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

 

 

Count 

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

FROM 

1.简单形式:

得到数据库中客户 的数量:

var q = db.Customers.Count(); 

 

2.带条件形 式:

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

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

 

LongCount 

说明 :返回集合中的元素个数,返回 LONG 类型;不延迟。对于元素个数较多的集合可 视

情况可以选用 LongCount 来统计元素个数,它返回 long 类型,比较精确。生成  SQL 语句为:

SELECT COUNT_BIG(*) FROM 

 

var q = db.Customers.LongCount(); 

 

Sum 

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

SELECT SUM(„) FROM 

 

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 

}; 

 

Aggregate 

 

where p2.UnitPrice > g.Average (p3 => p3.UnitPrice) 

select p2 

说明:根据输入的表达式获取聚合值;不延迟。即 是说:用一个种子值与当前元素通过指

定的函数来进行对比来遍历集合中的元素 ,符合条件的元素保留下来。如果没有指定种子

值的话,种子值默认为集合的第 一个元素。

posted @ 2013-07-02 22:33  岳帅超  阅读(325)  评论(0编辑  收藏  举报