【LINQ】Linq to SQL -- 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.Products.Sum(p => p.UnitsOnOrder);

2、映射形式

得到所有产品的订货总数

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

Min

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

1、简单形式

查找任意产品的最低单价

var q = db.Pfoducts.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.Mas(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
                             };

Avg

说明:返回集合中的数值类型元素的平均值。集合应为数字类型集合,其返回值类型为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

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

解释:种子值, 一般说的是随机数种子。 也就是函数srand的参数。C语言 或者说大多数编程语言的随机数是伪随机数, 如果不设置种子,那么每次启动程序获得的rand()序列是相同的。设置一个随机数种子, 可以改变这种情况。 常见的是用当前时间做种子。 即 srand ( time ( NULL ) ) ;

总结Linq to SQL

操作符作用是否延迟
Where过滤延迟
Select选择延迟
Distinct查询不重复的结果集延迟
Count返回集合中的元素个数,返回int类型不延迟
LongCount返回集合中的元素个数,返回LONG类型不延迟
Sum返回集合中数值类型元素之和,集合应为INT类型集合不延迟
Min返回集合中元素的最小值不延迟
Max返回集合中元素的最大值不延迟
Average返回集合中的数值类型元素的平均值。集合应为数字类型集合,其返回值类型为double不延迟
Aggregate根据输入的表达式获取聚合值不延迟
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨幂等

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值