LINQ学习笔记:聚合方法
聚合方法 主要方法: 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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |