聚合函數將在序列上執行特定的計算,並返回單個值,如計算給定序列平均值、最大值等。共有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);