聚合函数将在序列上执行特定的计算,并返回单个值,如计算给定序列平均值、最大值等。共有7种LINQ聚合查询操做符:Aggregate、Average、Count、LongCount、Max、Min和Sum。sql
Aggregate操做符对集合值执行自定义聚合运算。例如,须要列出全部产品类别清单,每一个类别名称之间用顿号链接。如下的代码演示了这一过程:数据库
//方法语法 var q = db.Categories .Select(c => c.CategoryName) .ToList() //.ToArray() .Aggregate((current, next) => String.Format("{0}、{1}", current, next));
从数据库中查询的结果集合:函数
Aggregate后获得的结果spa
求集合中元素的平均值,返回值类型doublecode
var list = db.Order_Details .GroupBy(o => o.OrderID) .Select(g => new { key = g.Key, avg = g.Average(x => x.UnitPrice) }) .ToList(); 生成的sql: SELECT [GroupBy1].[K1] AS [OrderID], [GroupBy1].[A1] AS [C1] FROM ( SELECT [Extent1].[OrderID] AS [K1], AVG([Extent1].[UnitPrice]) AS [A1] FROM [dbo].[Order Details] AS [Extent1] GROUP BY [Extent1].[OrderID] ) AS [GroupBy1]
返回的结果:orm
求集合中元素的个数,返回值类型Int32对象
var list = db.Order_Details .GroupBy(o => o.OrderID) .Select(g => new { key = g.Key, count = g.Count() }) .ToList(); 生成的sql: SELECT [GroupBy1].[K1] AS [OrderID], [GroupBy1].[A1] AS [C1] FROM ( SELECT [Extent1].[OrderID] AS [K1], COUNT(1) AS [A1] FROM [dbo].[Order Details] AS [Extent1] GROUP BY [Extent1].[OrderID] ) AS [GroupBy1]
求集合中元素的个数,返回值类型Int64blog
求集合中元素的最大值ip
var list = db.Order_Details .GroupBy(o => o.OrderID) .Select(g => new { key = g.Key, max = g.Max(x => x.UnitPrice) }) .ToList(); 生成的sql: SELECT [GroupBy1].[K1] AS [OrderID], [GroupBy1].[A1] AS [C1] FROM ( SELECT [Extent1].[OrderID] AS [K1], MAX([Extent1].[UnitPrice]) AS [A1] FROM [dbo].[Order Details] AS [Extent1] GROUP BY [Extent1].[OrderID] ) AS [GroupBy1]
求集合中元素的最小值ci
求集合中元素的和
LINQ 中的集合操做符是指根据相同或不一样集合(或集)中是否存在等效元素来生成结果集的查询操做,一共有4种:
方法名 |
说明 |
Distinct |
从集合移除重复值。 |
Except |
返回差集,差集是指位于一个集合但不位于另外一个集合的元素。 |
Intersect |
返回交集,交集是指同时出如今两个集合中的元素。 |
Union |
返回并集,并集是指位于两个集合中任一集合的惟一的元素。 |
使用方式均为“集合1.方法名(集合2)”,返回值为运算结果的集合,这里就不演示了。
生成是指建立新的值序列。
Empty操做符返回一个指定类型的空集合。这里的空不是null,而是元素数量为0的集合。如下的示例演示了如何建立一个IEnumerable<int>类型的空集合:
var q = Enumerable.Empty<int>();
DefaultIfEmpty将空集合替换为具备默认值的单一实例集合。执行此方法得到的集合将至少含有一个元素,这是由于DefaultIfEmpty方法须要两个参数,第一个参数是一个泛型集合,第二个参数是相应类型的单个元素,若是第一个参数中不含有任何元素,它将返回第二个参数指定的单个元素。若是你使用了DefaultIfEmpty方法的重载方法DefaultIfEmpty<T>(IEnumerable<T> array),若是指定的array集合为空,那么将返回一个类型为T,值为null的单个对象。如下的代码演示了这一过程:
//方法语法 var q = Enumerable.DefaultIfEmpty ( db.Employees .Where(e => e.FirstName.StartsWith("Aaf")) //更改此处的条件可得到不一样的集合,当前条件结果集合为空,因此返回后面的实体对象 , new Models.Employee() { FirstName = "Sunny D.D" } ).ToList();
Range操做符用于生成指定范围内的整数的序列。它须要两个参数,第一个参数是序列开始的整数值,第二个参数是序列中整数的数量。下面的示例演示了使用Range操做符来生成从0到9的整数序列:
var q = Enumerable.Range(0, 10);
Repeat操做符用于生成包含一个重复值的集合。它须要两个参数,第一个参数是任意类型的元素,第二个参数是生成的序列中所包含此元素的数量。下面的示例演示了使用Repeat来生成一个包含10个0的序列:
var q = Enumerable.Repeat(0, 10);