您好,登錄后才能下訂單哦!
這篇文章主要介紹c#中查詢表達(dá)式GroupBy怎么用,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!
Student類:
public class Student { public int StuId { get; set; } public string ClassName { get; set; } public string StudentName { get; set; } }
設(shè)定數(shù)據(jù)如下:
List<Student> studentList = new List<Student> { new Student {ClassName = "軟工一班", StudentName = "康巴一", StuId = 1}, new Student {ClassName = "軟工一班", StudentName = "康巴二", StuId = 2}, new Student {ClassName = "軟工一班", StudentName = "康巴三", StuId = 3}, new Student {ClassName = "軟工二班", StudentName = "康定一", StuId = 4}, new Student {ClassName = "軟工二班", StudentName = "康定二", StuId = 5}, new Student {ClassName = "軟工二班", StudentName = "康定三", StuId = 6}, };
我們假設(shè)兩個班里的學(xué)生總共有六名,現(xiàn)在根據(jù)班級分組
IEnumerable<IGrouping<string, Student>> studentGroup = studentList.GroupBy(s => s.ClassName);
如代碼,調(diào)用GroupBy擴(kuò)展方法后,返回類型為IEnumerable<IGrouping<string, Student>>, IEnumerable代表了返回結(jié)果可被foreach遍歷,其中泛型實現(xiàn)為IGrouping<string,Student>,按照普遍理解的分組的概念,可以推斷IGrouping中應(yīng)該是string代表的是一個key,即ClassName,那么key對應(yīng)的應(yīng)該就是一個Student的集合,但是代碼應(yīng)該怎樣實現(xiàn)呢?
可以首先foreach一下studentGroup
foreach (IGrouping<string, Student> item in studentGroup) { }
這時候可以item.一下看看提示信息
這時候發(fā)現(xiàn),只能提示出來的屬性只有一個key,那么怎樣通過item獲取到分組后的Student集合呢?這時候發(fā)現(xiàn)第二個GetEnumerator()方法,這個說明了item是可以被foreach的,類型為IEnumerator<Student>,說明了可被遍歷的類型為Student
然后可以foreach下item試一試
如果所示,果然是Student,根據(jù)推斷,現(xiàn)在在foreach中遍歷所有數(shù)據(jù),然后打出來看一下
foreach (IGrouping<string, Student> item in studentGroup) { Console.WriteLine(item.Key); foreach (var student in item) { Console.WriteLine(student.StudentName); } }
執(zhí)行結(jié)果如下:
所以可以斷定item是一個Student的集合,那么為什么item還有個key屬性呢,好像是和平常的集合不太一樣,事實確實是不一樣的,我們看下IGrouping的定義如下:
public interface IGrouping<out TKey, out TElement> : IEnumerable<TElement>, IEnumerable { /// <summary> /// 獲取 <see cref="T:System.Linq.IGrouping`2"/> 的鍵。 /// </summary> /// /// <returns> /// <see cref="T:System.Linq.IGrouping`2"/> 的鍵。 /// </returns> [__DynamicallyInvokable] TKey Key { [__DynamicallyInvokable] get; } }
IGrouping的key是作為自己的屬性來存儲了,TElement則實現(xiàn)了IEnumerable<TElement>,所以調(diào)用foreach遍歷IGrouping的時候返回的即是Student的集合了
這個探索是挺有趣的,通過神器vs的智能提示和源碼的實現(xiàn)最終知道了GroupBy的用法,并且了解了為什么這樣用。
同時也看出了通過接口可以巧妙的實現(xiàn)多態(tài),其中自然是妙趣無窮!
以上是“c#中查詢表達(dá)式GroupBy怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。