分組在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了。
?
???? 最后呈現兩個內容,一個是年份,一個是所有客戶消費的金額總和。
???? 對應的SQL:
?
????? ? 單列分組的特點:
????????????? 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這樣來取年份。
??????????? 代碼片斷如下:
?
??????? ? ? 多列分組中,需要注意以下幾個方面:
? ? ? ? ? 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語句來執行。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

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