:group分組后要取的字段或者是對象;2>:by分組對象,可以是一列也可以是多列;3>:into結果集對象。3:group的分類,這里分為單列分組,和多列分組。第一:單列分" />

欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

LINQ TO SQL ——Group by

系統 2169 0
原文: LINQ TO SQL ——Group by

分組在SQL中應用的十分普遍,在查詢,統計時都有可能會用到它。LINQ TO SQL中同樣具備group的功能,這篇我來講下LINQ TO SQL中關于group的用法。

???? 說明:

??? ? ? ?? 1:group 不一定要用到多表查詢中,單表查詢也是可以的。

?????????? 2:基本語法:

?????????????? 1>:group 分組后要取的字段或者是對象;

?????????????? 2>:by 分組對象,可以是一列也可以是多列;

?????????????? 3>:into 結果集對象。

? ? ? ? ?? 3:group的分類,這里分為單列分組,和多列分組。

? ? ?? ?第一:單列分組:及group by 后面跟一個具體的列名。 ???

?????? 我們以客戶表和客戶消費表來說明group的用法,年末了,一般都是對帳的時候,對于管理員來說,非常希望知識自己的會員在這一年內的消費總額。為此可以 這樣寫LINQ TO SQL來實現:以下例來說,group 后面的就是分組后要用到的消費金額字段:Price,by后面的是按什么分組,上面是按年份分組,into后面的結果集對象(salesByYear), 即分組后的結果會保存到它里面,之前的c,p的作用域到此為此,后面就只能用salesByYear了。

from?c? ?in ??Customers join?p? ?in ??Purchases on?c.ID?equals?p.CustomerID group?p.Price?by?p.Date.Year?into?salesByYear select? ?new ? { Year ?= ?salesByYear.Key, TotalValue? ?= ?salesByYear.Sum() }

?

???? 最后呈現兩個內容,一個是年份,一個是所有客戶消費的金額總和。

???? 對應的SQL:

SELECT?SUM([t2].[Price])?AS?[TotalValue],?[t2].[value]?AS?[Year] FROM?( ????SELECT?DATEPART(Year,?[t1].[Date])?AS?[value],?[t1].[Price] ????FROM?[Customer]?AS?[t0] ????INNER?JOIN?[Purchase]?AS?[t1]?ON?([t0].[ID])? ?= ??[t1].[CustomerID] ????)?AS?[t2] GROUP?BY?[t2].[value]

?

????? ? 單列分組的特點:

????????????? 1:分組后的結果集salesByYear,它有一個特點,就是包含一個Key的屬性,它對應group 語法中的by 關鍵字后面的內容,即按什么分組。

???????? ???? 2:要想實現SQL中的having功能也特別簡單,中需要在group語句完成后,加上相應的where 條件即可。例如:where salesByYear.Sum()>1000

????????????? 3:可以方便的實現對分組后數據的排序:例如在上面的where 條件后加上如下語句:orderby salesByYear.Key descending

? ? ? ? ????? 4:如果是通過計算過的字段要加上一個別名,例如:TotalPrice= salesByYear.Sum(),如果直接寫salesByYear.Sum()是不行的。

?????? ? 第二:多列的分組:就是group by 后面跟一個匿名對象。

??????????? 例如:從06年到08年,這三年內,所有用戶的消費金額,要顯示的內容包含用戶名,年份,消費金額。

? ? ? ? ? ? 最終效果圖:和SQL一樣,要想在最終的結果集中顯示某些字段,那么需要把要顯示的字段放進group by 的字段中,所有我們可以通過Year=salesByYear.Key.Year這樣來取年份。

LINQ TO SQL ——Group by

??????????? 代碼片斷如下:

from?c? ?in ??Customers join?p? ?in ??Purchases on?c.ID?equals?p.CustomerID group?p.Price?by? ?new ? { p.Date.Year, c.Name } into?salesByYear orderby?salesByYear.Key.Year?descending select? ?new ? { TotalPrice ?= ??salesByYear.Sum(), Year ?= ?salesByYear.Key.Year, Name ?= ?salesByYear.Key.Name }

?

??????? ? ? 多列分組中,需要注意以下幾個方面:

? ? ? ? ? 1:group語法中的by 后面并不是跟具體的列名, 而是通過一個匿名對象來分組;

????????? 2:多列分組時,結果集salesByYear的Key屬性并不是一列值,而是參與分組所有對象的值構成的數組;可以通過salesByYear.Name等等形式呈現;

? ? ? ??? 3:如果group 后面跟的是具體的列名,如group p.Price,最后的選擇列時可以這樣寫:TotalPrice= salesByYear.Sum();如果后面跟的是對象名,即group p by,最后的選擇列時只能這樣寫:TotalPrice= salesByYear.Sum(p=>p.Price),因為此時的salesByYear的內容是一個對象,并不是單一列。

????????? 4:可以根據salesByYear的Key來取分組字段,Year=salesByYear.Key.Year,而不能這樣寫Year=salesByYear.Key;

? ? ? ? 總結: ?上面是些比較覺見的LINQ TO SQL中關于group的用法,對拉姆達表達式特別喜歡的朋友,可以用拉姆達表達式來實現。無論是單列分組還是多列,其實本質上和傳統SQL的分組原理是一樣的,因為LINQ TO SQL最終會翻譯成SQL語句來執行。

LINQ TO SQL ——Group by


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!??!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产在线视频2019最新视频 | 又大又粗进出白浆直流动态图 | yw在线播放 | 在线观看亚洲网站 | 国产高清在线精品一区免费97 | 国产精品揄拍100视频最近 | 免费a网站 | 一级午夜a毛片免费视频 | 日日摸夜夜添夜夜添破第一 | 国产成人av一区二区三区 | 国产亚洲精品久久久久久线投注 | 99久热国产精品视频尤物不卡 | 国产成人一区二区三区 | 91精品国产乱码久久久久久久久 | 久久久久成人精品 | 欧美黑人狂野猛交老妇 | 一道本视频| 91成人在线网站 | 国产成人免费视频网站高清观看视频 | 大色综合色综合资源站 | 黑人操亚洲人 | 888奇米影视 | 蜜臀影院 | 日色视频 | 成人国产在线观看 | 免费xxxx日本大片在线观看 | 国产成人免费无庶挡视频 | 久久精品视频7 | 亚洲欧美日韩在线 | 一级特黄欧美 | 日韩亚洲欧美在线爱色 | 色视频在线观看 | 亚洲欧美韩国日产综合在线 | 免费观看视频www | 色狠狠色综合吹潮 | 日本美女一区二区 | 欧美精品成人一区二区三区四区 | 色在线视频网站 | 深夜福利网站 | 亚州第一视频 | 热伊人99re久久精品最新地 |