运维开发网

linq中的聚合运算符

运维开发网 https://www.qedev.com 2022-07-23 22:40 出处:网络
这篇文章介绍了linq中的聚合操作符,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

这篇文章介绍了linq中的聚合操作符,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下


一、Aggregate操作符

聚合运算符对集合值执行自定义聚合运算。看一下聚合的定义:

public static TSource Aggregatelt;TSourcegt;(this IEnumerablelt;TSourcegt; source, Funclt;TSource, TSource, TSourcegt; func);public static TAccumulate Aggregatelt;TSource, TAccumulategt;(this IEnumerablelt;TSourcegt; source, TAccumulate seed, Funclt;TAccumulate, TSource, TAccumulategt; func);public static TResult Aggregatelt;TSource, TAccumulate, TResultgt;(this IEnumerablelt;TSourcegt; source, TAccumulate seed, Funclt;TAccumulate, TSource, TAccumulategt; func, Funclt;TAccumulate, TResultgt; resultSelector);

可以看到,Aggregate有三个方法重载。这里以第一个重载方法为例。第一个重载方法中的第二个参数是委托,其参数类型都是set元素类型,其返回值类型也是set元素类型。例如,列出所有产品,用一个停顿连接每个产品名称。

首先定义产品类别:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace TogetherOperation{ public class Product { public int Id { get; set; } public int CategoryId { get; set; } public string Name { get; set; } public double Price { get; set; } public DateTime CreateTime { get; set; } }}

在Main()方法中,调用:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace TogetherOperation{ class Program { static void Main(string[] args) { Listlt;Productgt; listProduct = new Listlt;Productgt;() { new Product(){Id=1,CategoryId=1, Name="C#高级编程第10版", Price=100.67,CreateTime=DateTime.Now}, new Product(){Id=2,CategoryId=1, Name="Redis开发和运维", Price=69.9,CreateTime=DateTime.Now.AddDays(-19)}, new Product(){Id=3,CategoryId=2, Name="活着", Price=57,CreateTime=DateTime.Now.AddMonths(-3)}, new Product(){Id=4,CategoryId=3, Name="高等数学", Price=97,CreateTime=DateTime.Now.AddMonths(-1)}, new Product(){Id=5,CategoryId=6, Name="国家宝藏", Price=52.8,CreateTime=DateTime.Now.AddMonths(-1)} }; // 1、Aggregate // 因为Name是string类型的,所以委托的参数和返回值的参数类型都是string类型的,直接输出即可 // current和next都是listProduct中的Name的值 var query = listProduct.Select(c =gt; c.Name).Aggregate((current, next) =gt; string.Format("{0}、{1}", current, next)); Console.WriteLine(query); Console.ReadKey(); } }}

结果:


从结果中可以看出,最终输出的结果是名称拼接的值,通过停顿进行分段。


二、Average操作符

Average运算符与T-SQL中的Avg具有相同的效果。就是求集合中元素的平均值来看平均法的定义。


可见Average有很多重载的方法。您可以直接计算一组基本数据类型的平均值,也可以计算一组其他类型的元素的平均值。让我们看下面的例子:


1、直接求基本类型集合的平均值Listlt;intgt; list = new Listlt;intgt;();list.Add(1);list.Add(3);list.Add(4);list.Add(5);list.Add(6);list.Add(10);list.Add(13);var result = list.Average();Console.WriteLine("平均值:"+result);

结果:



2、求listProduct集合中价格的平均值var result = listProduct.Average(p =gt; p.Price);Console.WriteLine("平均值:" + result);

结果:



三、Count操作符

Count运算符的作用是找出集合中元素的数量。返回值类型是Int32。看一下方法的定义:


请看下面的例子:

int count1 = listProduct.Count(); //5// 查询出CategoryId为1的集合的个数// 查询表达式int count2 = (from p in listProduct where p.CategoryId == 1 select p).Count(); //2// 方法语法int count3 = listProduct.Count(p =gt; p.CategoryId == 1); //2Console.WriteLine(count1);Console.WriteLine(count2);Console.WriteLine(count3);

结果:



四、LongCount操作符

count操作符也用于查找集合中元素的数量。返回值类型是Int64。看一下方法的定义:


请看下面的例子:

long count1 = listProduct.LongCount(); //5// 查询出CategoryId为1的集合的个数// 查询表达式long count2 = (from p in listProduct where p.CategoryId == 1 select p).LongCount(); //2// 方法语法long count3 = listProduct.LongCount(p =gt; p.CategoryId == 1); //2Console.WriteLine(count1);Console.WriteLine(count2);Console.WriteLine(count3);

结果:



五、Max操作符

最大运算符是找出一个集合中元素的最大数量。看一下方法的定义:


从方法的定义可以看出,Max算子不仅可以找到基本数值类型集合的最大值,还可以找到其他类型集合中满足条件的最大值。请看下面的例子:

Listlt;intgt; list = new Listlt;intgt;();list.Add(1);list.Add(3);list.Add(4);list.Add(5);list.Add(6);list.Add(10);list.Add(13);Console.WriteLine(list.Max()); //13Console.WriteLine(listProduct.Max(p =gt; p.Price)); //100.67Console.WriteLine((from p in listProduct select p.Price).Max()); //100.67

结果:



六、Min操作符

Min操作符用于查找集合中元素的最小值。看一下定义:


从方法的定义可以看出,Min算子不仅可以找到基本数值类型集合的最小值,还可以找到满足条件的其他集合的最小值。请看下面的例子:

Listlt;intgt; list = new Listlt;intgt;();list.Add(1);list.Add(3);list.Add(4);list.Add(5);list.Add(6);list.Add(10);list.Add(13);Console.WriteLine(list.Min()); //1Console.WriteLine(listProduct.Min(p =gt; p.Price)); //52.8Console.WriteLine((from p in listProduct select p.Price).Min()); //52.8

结果:



七、Sum操作符

求和运算符用于计算集合中元素的总和。看一下定义:


从方法的定义可以看出,Sum运算符不仅可以求出基本数值类型集合中元素的和,还可以求出满足条件的其他集合中元素的和。请看下面的例子:

Listlt;intgt; list = new Listlt;intgt;();list.Add(1);list.Add(3);list.Add(4);list.Add(5);list.Add(6);list.Add(10);list.Add(13);Console.WriteLine(list.Sum()); //42Console.WriteLine(listProduct.Sum(p =gt; p.Price)); //377.37Console.WriteLine((from p in listProduct select p.Price).Sum()); //377.37

结果:


这就是本文的全部内容。

0

精彩评论

暂无评论...
验证码 换一张
取 消