Linq查询操作之聚合操作(count,max,min,sum,average,aggregate,longcount)
在Linq中有一些这样的操作,根据集合计算某一单一值,比如集合的最大值,最小值,平均值等等。Linq中包含7种操作,这7种操作被称作聚合操作。
1、Count操作,计算序列中元素的个数,或者计算满足一定条件的元素的个数
2、Sum操作,计算序列中所有元素的值的总和
3、Max操作,计算序列中元素的最大值
4、Min操作,计算序列中元素的最小值
5、Average操作,计算序列中所有元素的平均值
6、Aggregate操作,对集合中的元素进行自定义的聚合计算
7、LongCount操作,计算集合中的元素的数量,或者满足一定条件的元素的数量,一般用来计算大型集合中元素的数量
下面我们就来对这些聚合操作来做逐一的分析。
Count操作
Count操作是用来计算序列中元素的数量或者满足一定条件的元素的数量。Count()方法的原型:
public static int Count<TSource>(this IEnumerable<TSource> source);
public static int Count<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);
Count方法有2个原型,第一个只是单独的计算序列中的元素的数量总和,第二个原型有一个委托函数,用来筛选满足一定条件的元素,然后再计算满足条件的数量和。下面我们举个例子来说明:
private void CountQuery()
{
int[] ints = new int[] { ,,,,,, }; var result = ints.Count();
var result2 = ints.Count(x => x > ); Response.Write(result + "</br>"); Response.Write(result2 + "</br>"); }
这个例子中result是计算ints数组的总数量,result计算的是ints中元素值大于4的元素个数。
看看运行结果:

这种求和过程也很简单

Sum操作
Sum操作计算序列中所有元素的和。Sum函数的原型比较多,这里不一一列举。看例子:
private void SumQuery()
{
int[] ints = new int[] { ,,,,,, }; var result = ints.Sum(); Response.Write(result + "</br>"); }
看看结果:
Max操作
Max操作来计算序列中元素的最大值。
private void MaxQuery()
{
int[] ints = new int[] { ,,,,,, }; var result = ints.Max(); Response.Write(result + "</br>"); }

Min操作
Min操作来计算序列中元素的最小值。
private void MinQuery()
{
int[] ints = new int[] { ,,,,,, }; var result = ints.Min(); Response.Write(result + "</br>"); }

Average操作
Average操作是计算序列的所有元素的平均值。
private void AverageQuery()
{
int[] ints = new int[] { ,,,,,, }; var result = ints.Average(); Response.Write(result + "</br>"); }

Aggregate操作
Aggregate操作,上面的一些都比较简单,我们重点来分析一下Aggregate操作。Aggregate操作能够对集合中的元素进行自定义的聚合计算。Aggregate()函数有3种原型:
public static TSource Aggregate<TSource>(this IEnumerable<TSource> source, Func<TSource, TSource, TSource> func);
public static TAccumulate Aggregate<TSource, TAccumulate>(this IEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> func);
public static TResult Aggregate<TSource, TAccumulate, TResult>(this IEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> func, Func<TAccumulate, TResult> resultSelector);
其中source表示数据源,func表示累加器函数,seed表示累加器的初始值,resultSelector表示转换结果函数。
下面我们用一个详细的例子来分累加是如何操作的。
首先我们创建一个整型数组ints,值是0~99.
使用Aggregate计算ints中的素有元素之和。
private void AggregateQuery()
{
int[] ints = new int[]; for (int i = ; i < ; i++)
{
ints[i]=i;
} var result = ints.Aggregate((a,b) => a+b); Response.Write(result + "</br>"); }
计算结果:
我们看第一个原型的累加过程:

最终就是通过遍历数据源的每一个元素,根据我们传如的累加函数来累加。比如我们累加函数是求所有元素的和,那么累加函数就是func(a,b){a+b},如果求所有元素的乘积,那么累加函数就是func(a,b){a*b}.
参数a,b的意义:a表示当前元素之前的所有数据根据累加函数求得的值,b就是当前元素。
我们看第二个累加原型:
第二个累加原型有一个累加基数seed,就表示在这个seed基础上进行累加。比如上面我们创建的数组是0~99,累加和是4950.那么我给累加seed这个基数设置为100,那么累加和就是4950+100=5050.
private void AggregateQuery()
{
int[] ints = new int[]; for (int i = ; i < ; i++)
{
ints[i]=i;
} var result = ints.Aggregate(,(a,b) => a+b); Response.Write(result + "</br>"); }
看看结果:
看源码分析也确实是这样子的:

第三个原型又多了一个委托函数,这个委托函数是对累加的结果做进一步处理然后返回处理后的结果。我们先看看源码分析:

从累加原型的源码看出,把最终的累加结果又传给resultSelector方法进行进一步处理。
我们看个简单的例子:
private void AggregateQuery()
{
int[] ints = new int[]; for (int i = ; i < ; i++)
{
ints[i]=i;
} var result = ints.Aggregate(,(a,b) => a+b,x=>x*-); Response.Write(result + "</br>"); }
从代码可以看出,我们最终累加的值,然后对它乘以-1返回结果。我们预测应该返回-5050.
看看结果:

看来我们经过源码分析,最终得到了验证,我们的分析是正确的。
LongCount操作
LongCount和Count一样,都是计算序列中元素的数量或者满足一定条件的元素的数量,一般longcount用来计算大型的集合。但是从源代码中我没看到LongCount和Count的计算方法有什么不同,只是计算和的num的声明不同,Count的num声明为int类型,而LongCount的num声明为long类型,数据范围扩大了而已,这里就不再重复讲解了,参考Count即可。
Linq查询操作之聚合操作(count,max,min,sum,average,aggregate,longcount)的更多相关文章
- MySQL之聚合数据(AVG,COUNT,MAX,MIN,SUM)
1.首先我们需要了解下什么是聚合函数 聚合函数aggregation function又称为组函数. 认情况下 聚合函数会对当前所在表当做一个组进行统计. 2.聚合函数的特点 1.每个组函数接收一个参 ...
- SQL-基础学习4--聚集函数:AVG(),COUNT(),MAX(),MIN(),SUM();聚集不同值:DISTINCT
第九课 9.1 聚集函数(对某些行运行的函数,计算并返回一个值) 我们经常需要汇总数据而不用把它们实际检索出来,为此SQL提供了专门的函数.使用这些函数,SQL查询可用于检索数据,以便分析和报表生成. ...
- sql-函数avg,count,max,min,sum
常用函数 AVG (平均) COUNT (计数) MAX (最大值) MIN (最小值) SUM (总合) 运用函数的语法是: SELECT "函数名"("栏位名&qu ...
- MySQL之汇总数据(AVG,COUNT,MAX,MIN,SUM)
table test Field Type Null Key Default Extra id int(11) NO PRI NULL auto_increment name char(50) NO ...
- mysql之count,max,min,sum,avg,celing,floor
写在前面 昨天去青龙峡玩了一天,累的跟狗似的.不过还好,最终也算登到山顶了,也算来北京后征服的第三座山了.这里也唠叨一句,做开发这行,没事还是多运动运动,对自己还是很有好处的,废话少说,还是折腾折腾s ...
- SQL--合计函数(Aggregate functions):avg,count,first,last,max,min,sum
SQL--合计函数(Aggregate functions):avg,count,first,last,max,min,sum avg() 函数 定义和用法 AVG 函数返回数值列的平均值.NULL ...
- group by与avg(),max(),min(),sum()函数的关系
数据库表: create table pay_report( rdate varchar(8), --日期 region_id varchar(4), --地市 ...
- 49-python基础-python3-列表-常用列表统计函数-max()-min()-sum()
max() min() sum() 1-数字列表统计 实例: 2-字符串列表统计. 根据ASCII码大小统计字符串列表的min()和max(). 注意:sum()函数无法统计字符串列表. 实例:
- MDX Step by Step 读书笔记(七) - Performing Aggregation 聚合函数之 Max, Min, Count , DistinctCount 以及其它 TopCount, Generate
MDX 中最大值和最小值 MDX 中最大值和最小值函数的语法和之前看到的 Sum 以及 Aggregate 等聚合函数基本上是一样的: Max( {Set} [, Expression]) Min( ...
随机推荐
- Win10 UWP开发中的重复性静态UI绘制小技巧 1
介绍 在Windows 10 UWP界面实现的过程中,有时会遇到一些重复性的.静态的界面设计.比如:画许多等距的线条,画一圈时钟型的刻度线,同特别的策略排布元素,等等. 读者可能觉得这些需求十分简单, ...
- dojo/dom-construct.toDom方法学习笔记
toDom方法用来将html标签字符串转化成DOM节点.1.7之后toDom方法被分配到了dom-construct模块. require(["dojo/dom-construct" ...
- Html做三个平台原生APP啦
DeviceOne之前介绍过了,现在来介绍一下DeviceOne快速开发到什么程度 使用js只需要5分钟就可以打出垮Android.ios.windows三大平台的纯原生UI的安装包. 只需要6个小时 ...
- IBatisNet:让insert操作返回新增记录的主键值
项目引用ibatis包: IBatisNet.Common.dll --文件版本1.6.2.0 IBatisNet.DataAccess.dll IBatisNet.DataMapper.dll 项目 ...
- redis启动流程介绍
转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/114.html?1455860562 1. 准备运行环境 * 设置oom ...
- Java-集合练习题1
第一题 (Map)利用Map,完成下面的功能: 从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队.如果该 年没有举办世界杯,则输出:没有举办世界杯. 附:世界杯冠军以及对应的夺冠年 ...
- 知方可补不足~SqlServer自动备份数据库及清理备份文件
回到目录 对于SQLSERVER这个关系型数据库来说,为了保持数据的安全,备份是必须的,当你的一个误操作导致数据丢失,这可能是灾难性的,是不被允许发生的,这时,我们必须要做好定期的备份工作,如我们可以 ...
- 在ubuntu上安装nodejs[开启实时web时代]
作为一名菜鸟,竟然在centos桌面上连输入命令行的地方都找不到,是在是对不起开山祖师,最后苍天不负苦心人,在ubuntu上找见了 [安装过程参考了http://cnodejs.org/topic/4 ...
- Ajax技术使用
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- 深入理解PHP内核(十二)函数-函数的定义、传参及返回值
原文链接:http://www.orlion.ga/344/ 一.函数的定义 用户函数的定义从function 关键字开始,如下 function foo($var) { echo $var; ...