程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C# 3.0入門系列(九)-之GroupBy操作(3)

C# 3.0入門系列(九)-之GroupBy操作(3)

編輯:關於C語言

各類產品,數量之和

var q =
from p in db.Products
group p by p.CategoryID into g
select new {
 g.Key,
 NumProducts = g.Count()
};

如果用OrderDetails表做統計,會更好些,因為,不光可以統計同一種產品,還可以統計同一訂單。

接著統計,同各類產品中,斷貨的產品數量。使用下面的語句。

var q =
from p in db.Products
group p by p.CategoryID into g
select new {
 g.Key,
 NumProducts = g.Count(p => p.Discontinued)
};

在這裡,count函數裡,使用了Lambda表達式。在上篇中,我們已經闡述了g是一個組的概念。那在該Lambda表達式中的p,就代表這個組裡的一個元素或對象,即某一個產品。還可以使用where條件來限制最終篩選結果

var q =
from p in db.Products
group p by p.CategoryID into g
where g.Count() >= 10
select new {
 g.Key,
 ProductCount = g.Count()
};

這句在翻譯成sql語句時,欠套了一層,在最外層加了條件。

SELECT [t1].[CategoryID], [t1].[value2] AS [ProductCount]
FROM (
SELECT COUNT(*) AS [value], COUNT(*) AS [value2], [t0].[CategoryID]
FROM [dbo].[Products] AS [t0]
GROUP BY [t0].[CategoryID]
) AS [t1]
WHERE [t1].[value] >= @p0
-- @p0: Input Int32 (Size = 0; Prec = 0; Scale = 0) [10]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 2.0.20612.0

GroupBy操作中GroupBy的匿名類

在第一次談到匿名類時,我們就提到不光Select操作可以使用匿名類,其他操作符也可以。但是,OrderBy不支持。請參考C#3.0入門系列(六)-之OrderBy操作

當用戶既想按產品的分類,又想按供應商來做分組,該怎麼辦呢。這時,我們就該使用匿名類。

var categorIEs =
from p in db.Products
group p by new { p.CategoryID, p.SupplIErID } into g
select new {g.Key, g};

在by後面,new出來一個匿名類。這裡,Key其實質是一個類的對象,Key包含兩個Property,一個是CategoryID,再一個是SupplIErID ,要想取到具體CategoryID的值,需要g.Key.CategoryID,才能訪問到。我們來看dlinq翻譯的T-sql語句。

SELECT [t0].[SupplIErID], [t0].[CategoryID]
FROM [dbo].[Products] AS [t0]
GROUP BY [t0].[CategoryID], [t0].[SupplIErID]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 2.0.20612.0

先按CategoryID,再按SupplIErID ,和匿名類中的循序一樣。

最後一個例子。

var categorIEs =
from p in db.Products
group p by new { Criterion = p.UnitPrice > 10 } into g
select g;

按產品單價是否大於10分類。其結果為兩類,大於的是一類,小於及等於為另一類。好了,剩下的,大家自己多去領會。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved