快速业务通道

LINQ学习笔记:聚合方法

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-03-14

聚合方法

主要方法:

Count, LongCount: 返回输入序列的元素数量, 并且满足一个断言(可选), SQL对应语法为COUNT()

Min, Max: 返回输入序列中的最小或最大的元素, SQL对应语法为MIN(), MAX()

Sum, Average: 计算序列中的所有元素的总和或者平均数, SQL对应语法为SUM(), AVG()

Aggregate: 执行一个自定义的聚合计算, 无对应SQL语法

Count, LongCount

源序列: IEnumerable

断言: TSource => bool (可选)

Count枚举一个序列并返回其中的元素总数:

   1: int fullCount = new int[] { 5, 6, 7}.Count();    // 3

 

在IEnumerable.Count的内部实现中, 它首先测试输入序列是否实现了ICollection, 如果是, 则直接调用ICollection.Count, 否则就利用一个简单的计算数遍历所有元素每次加1获得最后的总数.

另外, 我们也可以在查询中提供一个断言:

   1: int digitCount = “jame921″.Count (c => char.IsDigit (c));   // 3

 

LongCount跟Count做一样的工作, 只不过它返回的是一个64位的整数, 可以计算超过20亿的元素

Min和Max

源序列: IEnumerable

可选结果选择器: TSource => TResult

Min和Max分别返回输入序列中最小和最大的元素:

   1: int[] numbers = { 28, 32, 14 };
   2:  
   3: int smallest = numbers.Min();    // 14;
   4:  
   5: int largest  = numbers.Max();    // 32;

 

你也可以包含一个选择表达式:

   1: int smallest = numbers.Max (n => n % 10);   // 8;

 

如果元素本身并不是可比较的, 那么选择器表达式就是必须的了, 换句话说, 如果元素没有实现IComparable, 例如:

   1: Purchase runtimeError =
   2:  
   3:   dataContext.Purchases.Min();      // 编译错误
   4:  
   5: decimal? lowestPrice =
   6:  
   7:     dataContext.Purchases.Min (p => p.Price);    // OK

 

一个选择器表达式不仅决定元素之间如何做比较, 同时也可以影响最后的结果. 例如前面的例子返回的结果是一个decimal类型的数值, 而不是一个purchase对象, 为了要获得最便宜的采购订单, 我们需要一个子查询:

   1: Purchase cheapest = dataContext.Purchases
   2:  
   3:   .Where (p => p.Price ==
   4:  
   5:           dataContext.Purchases.Min(p2 => p2.Price))
   6:  
   7:     .FirstOrDefault();

 

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号