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

C# 3.0入門系列(八)-之GroupBy操作(2)

編輯:關於C語言

我們來看下面的例子。

var q =
from p in db.Products
group p by p.CategoryID into g
select g;

在這裡,from p in db.Products表示從表中將對象紀錄取出來。p就是每一個產品。而後面一句,group p by p.CategoryID into g表示對p進行歸類,按什麼歸類呢,就是要按我們設定的CategoryID這個字段。而這個歸類的結果,被重新命名為g,而且是必須重新命名。一旦重新命名,p的作用域就結束了,所以,最後select時,只能select g。

那有人就要問了,不重新命名可以嗎?回答,可以。那你的select語句就沒有了,上面語句等同與

var q = from p in db.Products
group p by p.CategoryID;

這是query表達式中,很少見的沒有select語句的情況。我記憶中,好像只有此一種。我們還是按

var q =
from p in db.Products
group p by p.CategoryID into g
select g;

來講解。因為這種更好理解。在T-Sql中,groupby只是用來做分組統計,計算平均值,最大值,求和等等,而在dlinq中的groupby,則發揮到了極值。我們用ToList()取到結果,來看看上面語句返回的結果。如圖:

整個查詢語句返回八個組,這和我們數據庫的八種產品是對應的。找到最後一個group,點開+號,我們可以看到,裡面有個Key和Results VIEw字段,其中Key為8,是數據庫裡對應的Seafood分類,點開Results VIEw你會驚奇的發現,所有的Seafood都在裡面。我們把代碼改一下,看看dlinq究竟做了什麼。

Northwind db = new Northwind(ConStr);
db.Log = Console.Out;
Query#region Query
var q = from p in db.Products
group p by p.CategoryID into g
select g;

#endregion Query
Verification#region Verification
foreach (var gp in q)

}
return;
#endregion Verification{

單步調試該foreach段代碼,foreach的目的是讓dlinq加載數據。在console Windows上,你可以看到如下輸出。

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

SELECT [t0].[ProductID], [t0].[ProductName], [t0].[SupplIErID], [t0].[CategoryID
], [t0].[QuantityPerUnit], [t0].[UnitPrice], [t0].[UnitsInStock], [t0].[UnitsOnO
rder], [t0].[ReorderLevel], [t0].[Discontinued]
FROM [Products] AS [t0]
WHERE ((@x1 IS NULL) AND ([t0].[CategoryID] IS NULL)) OR ((@x1 IS NOT NULL) AND
([t0].[CategoryID] IS NOT NULL) AND (@x1 = [t0].[CategoryID]))
-- @x1: Input Int32 (Size = 0; Prec = 0; Scale = 0) [1]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 2.0.20612.0

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