LINQ to SQL文(2)Count/Sum/Min/Max/Avgオペレータ

4937 ワード

使用シーン
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
                            };