基礎才是重中之重 理解linq中的groupby

2022-02-19 14:05:06 字數 1190 閱讀 1665

linq將大部分sql語句進行了封裝,這使得它們更加物件導向了,對於開發者來說,這是一件好事,下面我從基礎層面來說一下groupby在linq中的使用。

對groupby的多字段分組,可以看我的這篇文章

groupby,顧名思義,它是對集合中某個或者某幾個字段進行分組,按著這個分組字段(這裡叫key)進行排列,例如,我們按著使用者表中部分進行分組,結果它會把人事部門的使用者資訊放在一起,技術部門的使用者資訊放在一起,一般地,在sql裡,我們只是對它們進行簡單的聚集計算,如按著部門進行人員數量上的統計,按著學科統計乙個學生的成績等等,而linq中,這個功能當然也可以實現,但不是今天的重點,也不是linq本身的重要,linq是物件導向的,它的groupby也是一樣,它把將各個部門中的使用者資訊實體放在乙個集合裡,給開發人員返回乙個完整的使用者物件

使用者表結構:

要實現的功能:對使用者表中「部門」字段「進行分組,將乙個部門的使用者列表做到一起,呵呵

**實現1:

var linq = userrepository.getmodel().groupby(i =>i.departmentid);

linq.tolist().foreach(i =>

response.write(""

); });

**實現2:事實上,實現上面的實現groupby已經做了一些過載,可以直接實現,如下**:

var user = userrepository.getmodel().groupby(i => i.departmentid, (i, v) => new

); user.tolist().foreach(i =>);

response.write(""

); });

結果如圖:

比較這兩種方法,覺得第二種的結構更好一些,第一種邏輯上比較簡單,但引入了新的型別igrouping>,對於這種情況,個人還是推薦用第二種方法。

**測試環境為linq to entity(entityframework 5)

基礎才是重中之重 方法override詳解

回到 目錄 方法的override,即方法的覆寫或者重寫,有時還是習慣叫它英文override,它是指將父類的abstract或者virtual方法進行重新設計,可以將新的功能加入其中,看起來很不錯,但在使用過程中,有時我們可能拿不準它,下面我說幾點 一 父類是抽象類,這時,它的例項化需要通過子類來...

基礎才是重中之重 位的運算

回到目錄 位運算無論在 還是在 裡都有對它支援,位運算即對數值型別的每位進行計算,對於程式裡,你可以使用十進位制,十六進製制,二進位制對它進行位運算,事實上無論你使用哪種進製,對於計算機來說最後都為把它轉換成二進位制 的形式,因為二進位制為簡單,呵呵。下面是關於位運算的 運算符號 位運算操作符 運算...

基礎才是重中之重 執行緒安全的Hashtable

執行緒安全就是多執行緒訪問時 web網頁多使用者訪問乙個頁面時 採用了加鎖機制,當乙個執行緒訪問該類的某個資料時,進行保護,其他執行緒不能進行訪問直到該執行緒讀取完,其他執行緒才可使用。不會出現資料不一致或者資料汙染。hashtable 表示鍵 值對的集合,這些鍵 值對根據鍵的雜湊 進行組織,它的k...