: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條評論
主站蜘蛛池模板: 一本色道久久88加勒比—综合 | 5060网午夜 | 麻豆短视频app网站 天天澡天天碰天天狠伊人五月 | 国产日产亚洲欧美综合另类 | 欧美精| 久久精品视频16 | 在线日韩欧美 | 欧美亚洲 尤物久久 综合精品 | 黄瓜av| 国产精品免费看久久久 | 日韩视频在线播放 | 国产香港一级毛片在线看 | 日本综合在线 | 国产精品视频久久久 | 偷拍做爰吃奶视频免费看 | 免费久久精品国产片香蕉 | 国产一区二区三区免费 | www.日韩 | 久久久久久久久久久9精品视频 | 男人的午夜影院 | 久久99精品视频 | 色黄网站在线观看 | 久草在线视频资源站 | 久久99成人| 日本高清免费不卡在线 | 久久亚洲国产欧洲精品一 | 久久久久久久av | 日韩精品一区二区三区中文字幕 | 日韩电影在线看 | 奇米777四色成人影视 | 国产免费黄色网址 | 色免费看 | 欧美电影网 | 久久伊人精品 | 色婷婷综合在线 | 99久久产在线 | 91精品国产日韩91久久久久久 | 日日干天天摸 | 久久综合综合久久 | 久久精品国产线看观看亚洲 | 我不卡午夜 |