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

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

LINQ TO SQL ——Group by

系統 2105 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條評論
主站蜘蛛池模板: 国产精品社区在线观看 | 久久 在线 | 国产香蕉98碰碰久久人人 | 99久久精品免费 | 97午夜精品| 久久免费视频2 | 中文字幕免费在线看线人动作大片 | 欧美一级特黄真人毛片 | 久久精品高清 | 正在播放一区二区 | 成在线人免费视频一区二区三区 | 公主恋人ova | 天天射天天干天天舔 | 91久久夜色精品国产网站 | 国产综合色在线视频播放线视 | 日韩欧美视频免费观看 | 九九九九九九精品免费 | 欧美 日韩 中文 | 久久视频这里只有精品 | 黄色成人在线网站 | 一级特黄一欧美俄罗斯毛片 | 成人做爰小视频 | 亚洲国产成人在线观看 | 天天色天天做 | 97久久精品国产精品青草 | 亚洲专区一路线二 | a加勒比一本东京 | 成人亚洲 | 国产情精品嫩草影院88av | 亚洲国产欧美另类 | 亚洲综合色丁香麻豆 | 日本99热| 只有精品| 毛片免费全部免费观看 | 欧美大狠狠大臿蕉香蕉大视频 | 老司机午夜精品视频播放 | 亚洲va精品中文字幕 | 欧美伊人久久久久久久久影院 | 99re6这里只有精品视频 | 草草影院国产第一页 | 国产毛片一级国语版 |