c#中查詢表達(dá)式GroupBy的使用方法_第1頁
c#中查詢表達(dá)式GroupBy的使用方法_第2頁
c#中查詢表達(dá)式GroupBy的使用方法_第3頁
c#中查詢表達(dá)式GroupBy的使用方法_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第c#中查詢表達(dá)式GroupBy的使用方法c#中實(shí)現(xiàn)IEnumerableT接口的類提供了很多擴(kuò)展方法,其中Select,Where等為最常見的,且?guī)缀鹾蚐ql語法類似比較好理解,基本滿足了日常處理集合的大部分需求,然而還有一部分稍有不一樣理解起來比較拗,實(shí)際分析一下實(shí)現(xiàn)的原理倒也很好理解,本篇文章介紹一下GroupBy的使用方法。

實(shí)驗(yàn)基礎(chǔ)數(shù)據(jù)用例:

Student類:

publicclassStudent

publicintStuId{get;set;}

publicstringClassName{get;set;}

publicstringStudentName{get;set;}

}

設(shè)定數(shù)據(jù)如下:

ListStudentstudentList=newListStudent

newStudent{ClassName="軟工一班",StudentName="康巴一",StuId=1},

newStudent{ClassName="軟工一班",StudentName="康巴二",StuId=2},

newStudent{ClassName="軟工一班",StudentName="康巴三",StuId=3},

newStudent{ClassName="軟工二班",StudentName="康定一",StuId=4},

newStudent{ClassName="軟工二班",StudentName="康定二",StuId=5},

newStudent{ClassName="軟工二班",StudentName="康定三",StuId=6},

};

我們假設(shè)兩個(gè)班里的學(xué)生總共有六名,現(xiàn)在根據(jù)班級分組

IEnumerableIGroupingstring,StudentstudentGroup=studentList.GroupBy(s=s.ClassName);

如代碼,調(diào)用GroupBy擴(kuò)展方法后,返回類型為IEnumerableIGroupingstring,Student,IEnumerable代表了返回結(jié)果可被foreach遍歷,其中泛型實(shí)現(xiàn)為IGroupingstring,Student,按照普遍理解的分組的概念,可以推斷IGrouping中應(yīng)該是string代表的是一個(gè)key,即ClassName,那么key對應(yīng)的應(yīng)該就是一個(gè)Student的集合,但是代碼應(yīng)該怎樣實(shí)現(xiàn)呢?

可以首先foreach一下studentGroup

foreach(IGroupingstring,StudentiteminstudentGroup)

}

這時(shí)候可以item.一下看看提示信息

這時(shí)候發(fā)現(xiàn),只能提示出來的屬性只有一個(gè)key,那么怎樣通過item獲取到分組后的Student集合呢?這時(shí)候發(fā)現(xiàn)第二個(gè)GetEnumerator()方法,這個(gè)說明了item是可以被foreach的,類型為IEnumeratorStudent,說明了可被遍歷的類型為Student

然后可以foreach下item試一試

如果所示,果然是Student,根據(jù)推斷,現(xiàn)在在foreach中遍歷所有數(shù)據(jù),然后打出來看一下

foreach(IGroupingstring,StudentiteminstudentGroup)

Console.WriteLine(item.Key);

foreach(varstudentinitem)

Console.WriteLine(student.StudentName);

}

執(zhí)行結(jié)果如下:

所以可以斷定item是一個(gè)Student的集合,那么為什么item還有個(gè)key屬性呢,好像是和平常的集合不太一樣,事實(shí)確實(shí)是不一樣的,我們看下IGrouping的定義如下:

publicinterfaceIGroupingoutTKey,outTElement:IEnumerableTElement,IEnumerable

///summary

///獲取seecref="T:System.Linq.IGrouping`2"/的鍵。

////summary

///

///returns

///seecref="T:System.Linq.IGrouping`2"/的鍵。

////returns

[__DynamicallyInvokable]

TKeyKey{[__DynamicallyInvokable]get;}

}

IGrouping的key是作為自己的屬性來存儲了,TElement則實(shí)現(xiàn)了IEnumerableTElement,所以調(diào)用foreach遍歷IGroupi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論