LINQ to SQL語句(2)Count/Sum/Min/Max/Avg操作符


使用場景

類似於SQL中的聚合函數,用於統計數據,不延遲。如返回序列中的元素數量、求和、最小值、最大值、求平均值。

Count

說明:用於返回集合中元素的個數,返回Int類型,生成SQL語句為SELECT COUNT(*)  FROM

1.  簡單形式

 返回訂單數量。

 var q = context.Orders.Count(); 

2. 條件形式

返回中客戶為倫敦的數量。

var q = context.Customers.Count(p => p.City == "London");

 LongCount

說明:用於返回集合中元素的個數,返回Long類型,不延遲,可用於返回元素個數比較的集合,可視情況可以用LongCount來統計元素個數,返回Login類型比較精確。生成的SQL語句為SELECT  COUNT_BIG(*)  FROM。

 var q = context.Customers.LongCount();

Sum

說明:用於返回集合數值類型元素之和,集合中的元素應為INT類型。不延遲。生成SQL語句為SELECT SUM(...) FROM 

1. 簡單形式

返回訂單的總運費:

 var q = context.Orders.Select(n => n.Freight).Sum();

2. 映射形式

返回商品的訂貨總數:

 var q = context.Products.Sum(n => n.UnitsOnOrder);

Min

說明:返回集合中元素的最小值。不延遲。生成的SQL語句SELECT MIN(…) FROM

1. 簡單形式

返回商品價格最低的元素:

 var q = context.Orders.Select(n => n.Freight).Min();

2. 映射形式

返回訂單中運費最低的元素:

  var q = context.Orders.Min(o => o.Freight);

3. 組合形式

查找每個類別中單價最低的元素:

 var q = from p in context.Products
                        group p by p.CategoryID into t
                        select new
                        {
                            CategoryID = t.Key,
                            Cheapest = from p2 in t where p2.UnitPrice == t.Min(p3 => p3.UnitPrice) select p2
                        };

Max

說明:返回集合中元素的最大值。不延遲。生成的SQL語句為 SELECT MAX(*) FROM

1. 簡單形式

返回商品單價最大的元素:

  var t = db.Products.Select(n => n.UnitPrice).Max();

2. 映射形式

 var q = db.Products.Max(p => p.UnitPrice);

3. 組合形式

查找每個類別中單價最大的元素:

var categories =
    from p in db.Products
    group p by p.CategoryID into g
    select new {
        g.Key,
        MostExpensiveProducts =
            from p2 in g
            where p2.UnitPrice == g.Max(p3 => p3.UnitPrice)
            select p2

Avg

 說明:用於返回集合中數值類型的平均值,集合應為數值類型集合。返回Double類型,不延遲。生成的SQL語句為SELECT AVG(...) FROM 

1. 簡單形式

返回商品價格的平均值:

var t = db.Products.Select(p => p.UnitPrice).Average();

2. 映射形式

 var t = db.Products.Average(p => p.UnitPrice);

3. 組合形式

查找每個類別中單價高於該類別平均單價的產品:

 var t = from c in db.Products
                        group c by c.CategoryID into g
                        select new
                            {
                                CategoryID = g.Key,
                                Price = from p in g where p.UnitPrice >= g.Average(n => n.UnitPrice) select p
                            };

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM